我试图根据与字段匹配的记录是否存在来选择某些记录。我有下表:
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的记录。
努力弄清楚。谢谢。
答案 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'