0

我有两张桌子:

表 1:StaffDB

SID | Name
1   | Peter
2   | Mary
3   | John

表 2:工作经历(员工将有超过 1 条记录)

HistID | SID | PositionID | isCurrent | StartDate  | EndDate  
1      | 1   | 123        | 0         | dd-mm-yyyy | dd-mm-yyyy  
2      | 1   | 221        | 1         | dd-mm-yyyy |  
3      | 2   | 434        | 0         | dd-mm-yyyy | dd-mm-yyyy

例如,在表 2 中。

Peter (SID=1) had 2 records, 2nd record is current record (isCurrent=1)  

Mary (SID=2) had 1 non current record  

John (SID=3) don't have any record

我如何编写一个 sql 查询来选择没有任何工作经历或没有任何当前记录的员工(isCurrent=1)

对于上面的例子,应该返回 Mary 和 John。

谢谢

4

1 回答 1

5

使用 LEFT JOIN 并检查连接表上的 NULL 主键:

SELECT StaffDB.*
FROM StaffDB
LEFT JOIN EmploymentHistory ON StaffDB.SID = EmploymentHistory.SID
  AND EmploymentHistory.isCurrent = 1
WHERE EmploymentHistory.HistID IS NULL

或使用 EXISTS - 这可能会更高效,虽然不那么容易阅读(主观):

SELECT *
FROM StaffDB
WHERE NOT EXISTS (SELECT 1 FROM EmploymentHistory 
                  WHERE EmploymentHistory.SID = StaffDB.SID
                  AND EmploymentHistory.isCurrent = 1)
于 2013-07-25T15:29:38.370 回答