外部JOIN问题

时间:2014-07-31 02:02:47

标签: sql ms-access 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;

非常感谢任何帮助 感谢

2 个答案:

答案 0 :(得分:0)

添加以下内容应该有效:

WHERE S.EmployeeID is null

使用left join代替right

答案 1 :(得分:0)

试试这个:

  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.EmployeeID添加到字段列表并删除WHERE,您将看到这一点。某些行将具有NULL S.EmployeeID,而其他行将具有带有值的S.EmployeeID。 NULLS是没有找到记录的行,但LEFT JOIN将列添加为NULL。

WHERE子句告诉我们只返回S.EmployeeId为NULL的记录,这在没有找到匹配的服务记录时发生