Issue with an Outer JOIN



我试图通过使用外连接找到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

最新更新