我有一个Employee表和另一个EmployeeManager,我需要进行查询以显示所有非经理的员工和另一个显示所有员工的经理。
这是第一个查询:
SELECT E.EmployeeId, E.FirstName, E.LastName
FROM Employee E
INNER JOIN (SELECT a.EmployeeId,
(SELECT COUNT(*) FROM EmployeeManager b
WHERE a.EmployeeId = b.Managerid) IsManager
FROM EmployeeManager a) ER
ON E.EmployeeId = ER.EmployeeId
AND ER.IsManager = 0
还有更好的选择吗?因为我根本不喜欢。
答案 0 :(得分:1)
作为经理的所有员工:
SELECT E.EmployeeId, E.FirstName, E.LastName
FROM Employee E
JOIN EmployeeManager M ON E.EmployeeId = M.ManagerId
所有不经理的员工
SELECT EmployeeId, FirstName, LastName
FROM Employee
WHERE EmployeeId NOT IN
(
SELECT ManagerId
FROM EmployeeManager
WHERE ManagerId IS NOT NULL
)
注意:由于来自 @usr 的评论,我添加了WHERE ManagerId IS NOT NULL
,表明ManagerId
可能允许使用NULL,这会导致{{1} }} 失败。在不知道架构的情况下,这涵盖了该场景。