Как я могу запросить из двух таблиц, но получить результаты только из одной? - PullRequest
0 голосов
/ 13 октября 2009

У меня есть список контактов, а затем список заблокированных контактов. Мне нужно запросить контакты, которые не заблокированы. Как я могу сделать запрос, где все заблокированные контакты отфильтрованы внутри запроса SQL?

Ответы [ 4 ]

7 голосов
/ 13 октября 2009

PSEUDO SQL:

SELECT * FROM CONTACTS as c WHERE c.ID NOT IN (SELECT ID FROM BLOCKEDCONTACTS)
3 голосов
/ 13 октября 2009

Вы можете следовать коду Йохана или вместо этого изменить свою базу данных. Вместо 2 таблиц просто сделайте это одним. И просто добавьте еще одно поле. Вы можете назвать его статусом с типом enum («заблокирован, разблокирован»);

Затем выполните это:

Select * from contacts where status = 'unblocked';

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

3 голосов
/ 13 октября 2009

Другое возможное решение этой проблемы:

SELECT     *
FROM       TblContacts AS C
LEFT JOIN  TblBlockedContacts AS BC
ON         C.ID = BC.ID
WHERE      C.ID IS NULL

Я думаю, что это должно быть более производительным, чем NOT IN.

1 голос
/ 13 октября 2009

Могу предложить другой вариант:

SELECT     * 
FROM       CONTACTS as c 
WHERE      NOT EXISTS (SELECT    * 
                       FROM      BLOCKEDCONTACTS as B 
                       WHERE     c.id=b.id)

Выбор этого варианта или любого из двух других зависит от СУБД и используемых вами индексов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...