Я использую Microsoft SQL Server Management Studio 2014, и у меня есть эти 3 таблицы:
СОТРУДНИКИ
EMPID | FIRSTNAME
1 | JOHNNY
2 | DWAYNE
3 | TOM
4 | CHRISTIAN
5 | JACK
6 | BRAD
7 | ADAM
8 | MATT
9 | WILL
10 | JIM
САМОЛЕТЫ
AID | NAME
1 | BOEING 1
2 | BOEING 2
3 | BOEING 3
4 | BOEING 4
5 | AIRBUS 1
6 | AIRBUS 2
7 | LEARJET
8 | DOUGLAS
9 | JUMBO
10 | ILYUSHIN
CERTIFIED
EMPID | AID
1 | 1
1 | 2
1 | 3
1 | 4
4 | 2
4 | 3
7 | 1
7 | 2
7 | 5
7 | 6
8 | 7
8 | 8
8 | 9
2 | 10
2 | 1
2 | 9
3 | 10
5 | 8
5 | 9
Концепция состоит в том, что в штате 10 сотрудников и 10 самолетов. Таблица CERTIFIED определяет, какой сотрудник имеет право пилотировать какие самолеты. Хотя не все сотрудники являются пилотами. Что мне нужно, так это каким-то образом выбрать всех пилотов, которые не сертифицированы для использования Боинга. То, что я пытался, но не работало, это следующее:
SELECT DISTINCT FIRSTNAME
FROM EMPLOYEES
WHERE EMPID IN (SELECT EMPID
FROM CERTIFIED
WHERE AID NOT IN (SELECT AID FROM AIRCRAFTS WHERE NAME LIKE 'BOEING%'))
Что дает эти результаты:
JACK
MATT
TOM
ADAM
DWAYNE
Это неправильно, поскольку согласно СЕРТИФИЦИРОВАННОЙ таблице ADAM и DWAYNE имеют право пилотировать хотя бы один Боинг.
Буду признателен за любую помощь, заранее спасибо!