说我有两个表,Employees
:
first last ID hire terminated wage
------ --------- --- ---------- ----------- ----
Ruth Halburg 1 2010-05-15 2017-03-01 2000
Sally Hallson 2 2010-08-20 NULL 5000
Merry Hallway 3 2011-01-24 NULL 3000
和RoutineReviews
:
ID EmployeeID RevDate
----- ---------- -------------
10 1 2015-02-02
11 2 2014-11-28
12 1 2014-09-03
第一张表中的ID
与EmployeeID
相对应;我该如何编写查询以返回所有从未进行过审核的员工(例如,员工3),按其雇用日期排序?
SELECT first last Employee.ID hire terminated wage
FROM Employees, RoutineReviews
WHERE Employees.ID != RoutineReviews.EmployeeID;
由于某种原因,这似乎不起作用。
答案 0 :(得分:2)
我们可以在此处使用EXISTS
子句:
SELECT *
FROM Employees e
WHERE NOT EXISTS (SELECT 1 FROM RoutineReviews r WHERE e.ID = r.EmployeeID)
ORDER BY hire;
答案 1 :(得分:0)
左联接在这里很方便:
SELECT e.first, e.last, e.ID, e.hire, e.terminated, e.wage
FROM Employees e
LEFT JOIN RoutineReviews r
on e.ID = r.EmployeeID
WHERE r.EmployeeID IS NULL
答案 2 :(得分:0)
您也可以在此处使用LEFT JOIN
SELECT
Employees.*
FROM
Employees
LEFT JOIN
RoutineReviews
ON
Employees.ID = RoutineReviews.EmployeeID
WHERE
RoutineReviews.ID IS NULL
或者使用NOT IN
,我建议您不要使用它,因为MySQL往往会严重优化与协同相关的子查询。
查询在这里供参考。
SELECT
Employees.*
FROM
Employees
WHERE
Employees.ID NOT IN (
SELECT
RoutineReviews.EmployeeID
FROM
RoutineReviews
WHERE
RoutineReviews.EmployeeID = Employees.ID
)