我有一个表,其中包含ID号和NAMES的简单列表-我正在尝试编写一个SQL,该SQL仅返回NAME没有特定ID的行。
这让我很困惑-以下查询返回所有内容,因为它们具有排除列表中的其他ID(较大的ID范围)。如何构造查询,以仅返回那些没有ID 2或3的查询-即,仅返回下表的“ bob”。
从表中选择*,其中ID不在(2,3)中
ID NAMES
1 bob
1 alice
2 alice
1 dave
2 dave
3 dave
4 dave
谢谢。
答案 0 :(得分:4)
一种方法是group by
和having
:
select name
from t
group by name
having sum(case when ID in (2, 3) then 1 else 0 end) = 0;
如果要使用原始ID,可以将listagg(id, ',') within group (order by id)
添加到select
。或使用not exists
:
select t.*
from t
where not exists (select 1
from t t2
where t2.name = t.name and
t2.id in (2, 3)
);