Получение записей первичного ключа, которые не связаны ни с каким внешним ключом - PullRequest
1 голос
/ 24 апреля 2009

У меня есть следующие две таблицы, аффилированные лица и источники рекомендаций.

Таблица

филиалов

id    loginid    
3     CR0007
2     CR5604
4     VRTC0008

Таблица ссылок

id    affiliates_id    loginid    
3     2                MLT29710
4     3                MX0001

Если я хочу знать, с кем связан реферал (и), я могу просто использовать следующий запрос:

SELECT affiliates.loginid affiliates_loginid, referrers.loginid referrers_loginid FROM affiliates, referrers WHERE affiliates.id = referrers.affiliates_id

Таблица результатов

affiliates_loginid    referrers_loginid    
CR5604                MLT29710
CR0007                MX0001

Что если, я хочу знать, , какой филиал не связан ни с одним реферрером. Какой отдельный оператор SQL я мог бы использовать? Изменение предложения where на affiliates.id! = Referrers.affiliates_id конечно, не будет работать.

Мой ожидаемый результат - VRTC0008, так как этот филиал не связан ни с какими рефералами.

Ответы [ 2 ]

5 голосов
/ 24 апреля 2009

Так как ваша таблица ссылок является одна ко многим, выполнение дополнительного выбора ухудшит производительность по мере роста таблицы.

Я не ниндзя SQL, но я бы сделал это:

SELECT affiliates.loginid affiliates_loginid, referrers.loginid referrers_loginid 
FROM affiliates 
LEFT OUTER JOIN referrers ON(referrers.affiliates_id = affiliates.id)
WHERE referrers.affiliates_id IS NULL
1 голос
/ 24 апреля 2009
SELECT affiliates.loginid affiliates_loginid, referrers.loginid referrers_loginid 
 FROM affiliates 
 WHERE affiliates.id NOT IN (Select Distinct referrers.affiliates_id From affiliates)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...