2013-07-25 3 views
0

я имел две таблицы:SQL запроса: Как выбрать запись из другой таблицы, где запись не существует или Count = 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)

для приведенного выше примера, должен вернуть Мэри и Джона.

Благодаря

ответ

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 

Или используйте СУЩЕСТВУЕТ - это, возможно, будет более производительным, хотя и не так легко читаемым (субъективная):

SELECT * 
FROM StaffDB 
WHERE NOT EXISTS (SELECT 1 FROM EmploymentHistory 
        WHERE EmploymentHistory.SID = StaffDB.SID 
        AND EmploymentHistory.isCurrent = 1)