我试图通过使用外连接找到NOT IN查询的替代方案。我正在查找那个没有做过汽车服务的员工的详细信息。
我的NOT IN示例如下
SELECT Employee.EmployeeID, Employee.FirstName, Employee.LastName, Employee.Salary, Employee.[EmployeeID]
FROM Employee
WHERE (((Employee.[EmployeeID]) Not In (SELECT EmployeeID from Service)));
我的外部连接草案工作,但它显示了完全相反的我想要的(即,它显示了员工谁做了一个服务的详细信息)
SELECT E.EmployeeId, E.FirstName, E.LastName, E.Salary
FROM Employee AS E
RIGHT OUTER JOIN Service AS S
ON E.EmployeeId = S.EmployeeId
GROUP BY E.EmployeeId, E.FirstName, E.LastName, E.Salary;
任何帮助都将非常感激由于
试试这个:
SELECT E.EmployeeId, E.FirstName, E.LastName, E.Salary
FROM Employee AS E
LEFT JOIN Service AS S ON E.EmployeeId = S.EmployeeId
WHERE S.EmployeeID is NULL
GROUP BY E.EmployeeId, E.FirstName, E.LastName, E.Salary;
-
SELECT <fields> FROM Employee
-所有员工都被选中 -
LEFT JOIN Service
-同时,查找每个员工的所有服务记录
然而,LEFT JOIN表示,如果员工没有匹配的服务记录,则返回服务行,但将所有字段填充为NULL。如果您将s.p employeeid添加到字段列表中并删除WHERE,您将看到以下内容。一些行的S.EmployeeID将为NULL,而其他行的S.EmployeeID将带值。NULL是没有找到记录的行,但是LEFT JOIN将该列添加为NULL。
WHERE子句告诉我们只返回S.EmployeeId为NULL的记录,当没有找到匹配的Service记录时发生
添加以下内容应该可以:
WHERE S.EmployeeID is null
用left join
代替right