SQL Server - выбор данных там, где их нет - PullRequest
0 голосов
/ 12 февраля 2010

Мне нужен способ выбора из таблицы, если эта таблица не содержит данных определенного типа.

Например, если у нас есть таблица с именем farm и другая таблица с именем animal. Теперь FarmA содержит свинью и козу, а FarmB просто содержит козу. Я хочу выбрать все фермы, в которых нет свиней.

Моей первой попыткой было сделать это:
SELECT f.* FROM farm f INNER JOIN animal a ON f.Id = a.FarmId WHERE a.Name <> 'pig';
Но это все равно возвращает меня обратно на FarmA, потому что там есть коза, но я не хочу, чтобы она возвращала фермы, на которых есть свиньи.

Я пробовал некоторые подзапросы и использовал not exists, но это тоже не сработало. Я уверен, что это просто, я просто не могу правильно структурировать свой запрос.

Ответы [ 2 ]

5 голосов
/ 12 февраля 2010
select f.* 
from Farm f 
left outer join (
    select FarmID 
    from Animal 
    where Name = 'pig'    
) a on f.ID = a.FarmID 
where a.ID is null
0 голосов
/ 12 февраля 2010

Это работает? Я более знаком с Oracle, но я проверил, и синтаксис «НЕ СУЩЕСТВУЕТ», кажется, тот же:

SELECT f.* FROM FARM f WHERE NOT EXISTS 
  (SELECT * FROM animal a WHERE a.FarmId = f.FarmId and a.Name = 'pig')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...