如果该表不包含某种类型的数据,我需要一种能够从表中进行选择的方法。
例如,如果我们有一个名为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
,但这也不起作用。我确信这很容易,我无法正确构建我的查询。
答案 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')