SQL Server - 选择不存在的数据

时间:2010-02-12 19:43:58

标签: 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,但这也不起作用。我确信这很容易,我无法正确构建我的查询。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这有用吗?我对Oracle比较熟悉,但我查了一下,“NOT EXISTS”语法似乎是一样的:

SELECT f.* FROM FARM f WHERE NOT EXISTS 
  (SELECT * FROM animal a WHERE a.FarmId = f.FarmId and a.Name = 'pig')