0

私は2つのテーブルを持っていました:

表 1: スタッフDB

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

表 2: 職歴 (スタッフには複数のレコードがあります)

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

雇用履歴がない、または現在のレコードがない (isCurrent=1) スタッフを選択する SQL クエリを作成するにはどうすればよいですか?

上記の例では、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 に答える