SQL Server - 选择不存在的数据

Mar*_*ler 0 sql sql-server

如果该表不包含某种类型的数据,我需要一种能够从表中进行选择的方法.

例如,如果我们有一个被调用的表farm和另一个被调用的表animal.现在,FarmA包含一只猪和一只山羊,而FarmB只包含一只山羊.我想选择所有不含猪的农场.

我的第一次尝试是这样做的:
SELECT f.* FROM farm f INNER JOIN animal a ON f.Id = a.FarmId WHERE a.Name <> 'pig';
但是这仍然让我回到了FarmA,因为它包含一只山羊,但我不希望它返回任何有猪的农场.

我尝试了一些subquerys并使用not exists但是也没用.我确信这很容易,我无法正确构建我的查询.

Red*_*ter 5

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
Run Code Online (Sandbox Code Playgroud)