используя NOT IN для нескольких таблиц - PullRequest
7 голосов
/ 27 сентября 2010

Как я могу упростить несколько не входящих запросов? Эффективно ли использовать несколько подзапросов: Не в (...) и Не в (..) и Не в (..)

Я использую количество (извините, забыл об этом)

 Select count (VisitorID)

 from Company

 where VisitorID not in (select VisitorID from UserLog where ActionID = 2 )

 and VisitorID not in (select VisitorID from Supplies where productID = 4)

Ответы [ 2 ]

7 голосов
/ 27 сентября 2010
Select count (VisitorID)

from Company C
where
NOT EXISTS (select * from UserLog U where ActionID = 2 AND C.VisitorID  = U.VisitorID)
AND
NOT EXISTS (select * from Supplies S where productID = 4 AND S.VisitorID  = U.VisitorID)

Почему НЕ СУЩЕСТВУЕТ?

  • NOT IN: Любые значения NULL VisitorID в UserLog или Supplies означают отсутствие соответствия

  • (LEFT JOIN): несколько выходных строк, если много UserLog или Supplies на VisitorID. Нуждается в DISTINCT, который меняет план

Обычно , НЕ СУЩЕСТВУЕТ, является единственно правильным вариантом

2 голосов
/ 27 сентября 2010

Вы можете использовать UNION для группы идентификаторов

Select User

from Company

where VisitorID not in (
select VisitorID from UserLog where ActionID = 2 
UNION
select VisitorID from Supplies where productID = 4
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...