如何根据不存在的其他记录选择记录?

时间:2019-01-28 22:14:42

标签: sql

我试图根据与字段匹配的记录是否存在来选择某些记录。我有下表:

ID    Name    Fruit
--------------------
1     Steve   Apple
2     Steve   Orange
3     Bob     Apple
4     Gary    Apple
5     Gary    Orange
6     Paul    Apple
7     Jeff    Orange

预期结果将仅显示某人有橙色但没有苹果的记录-在这种情况下,应仅显示Jeff的记录。

努力弄清楚。谢谢。

4 个答案:

答案 0 :(得分:1)

您可以这样执行WHERE子句:

SELECT t1.Name 
FROM your_table t1
WHERE fruit = 'Orange' 
AND NOT EXISTS (
SELECT 1 
FROM your_table t2 
WHERE t1.Name = t2.Name 
AND fruit = 'Apple'
)

这是先查找橙色记录,然后排除同一个也有苹果的人的记录。

如果使用SQL Server,则可以使用EXCEPT

SELECT name 
FROM @your_table t1
WHERE fruit = 'Orange' 

EXCEPT 

SELECT name 
FROM @your_table t1
WHERE fruit = 'apple' 

这会找到所有橙色的人,然后从数据集中删除所有也有苹果的人。

答案 1 :(得分:1)

您可以计算每个用户的水果数,并选择仅包含1个橙色水果的用户。如果没有保证,每个用户每种类型只能有一个水果,请使用count(distinct fruit)代替count(fruit)

Select Name
From tbl
Group by Name
Having Count(Fruit)=1 
and max(Fruit)='Orange'

答案 2 :(得分:0)

为此,我倾向于喜欢聚合。在这种情况下:

select Name
from tbl
where fruit in ('Orange', 'Apple')
group by Name
having min(Fruit) = 'Orange' and min(fruit) = max(fruit);

答案 3 :(得分:0)

在此处输入代码。您可以尝试以下查询来满足您的期望。

select Name
from tbl
group by Name
having Min(Fruit) = 'Orange'