用于排除的SQL
我有一个表,它是一个简单的ID号和名称列表——我试图编写一个SQL,它只返回名称没有特定ID的行 这一直困扰着我——下面的查询返回所有的ID,因为它们有来自排除列表的其他ID,这些ID的范围很大。如何构造一个只返回那些不具有ID 2或ID 3的人的查询,即只返回下表中的“bob” 从ID不在2、3中的表中选择*用于排除的SQL,sql,oracle,Sql,Oracle,我有一个表,它是一个简单的ID号和名称列表——我试图编写一个SQL,它只返回名称没有特定ID的行 这一直困扰着我——下面的查询返回所有的ID,因为它们有来自排除列表的其他ID,这些ID的范围很大。如何构造一个只返回那些不具有ID 2或ID 3的人的查询,即只返回下表中的“bob” 从ID不在2、3中的表中选择* ID NAMES 1 bob 1 alice 2 alice 1 dave 2 dave 3 dave 4 dave 谢谢。一种方法是分组,并拥有: 如果
ID NAMES
1 bob
1 alice
2 alice
1 dave
2 dave
3 dave
4 dave
谢谢。一种方法是分组,并拥有:
如果需要原始id,可以将组order by id中的listaggid,,'添加到select。或使用不存在:
用语言清楚地表达你想要什么,或者如何编写代码?您想要的行中的某些集合/列/组中不存在某个集合/列/组等中的值,以及如何在查询中准确地表示输入不允许的集合?一旦你清楚这将是一个常见问题。PS注意,代码问题需要一个明确的规范:请在代码问题中给出一个-cut&paste&runnable代码;示例输入,具有预期和实际输出,包括逐字错误消息;清晰的说明和解释。
select name
from t
group by name
having sum(case when ID in (2, 3) then 1 else 0 end) = 0;
select t.*
from t
where not exists (select 1
from t t2
where t2.name = t.name and
t2.id in (2, 3)
);