[英]select distinct records where multiple rows exist for one ID based on values in another column
因此,我不确定我的标题是正确的还是误导性的。 听起来很简单,但我无法弄清楚,也找不到很好的例子。
我想从ID不匹配特定代码的表中选择唯一ID。 例如我有tableA如下:
表A
ID Code
==== ====
1 AAA
1 BBB
1 CCC
2 AAA
2 DDD
2 EEE
3 BBB
3 GGG
3 HHH
我要返回的唯一结果是ID 3,因为ID 1和ID 2匹配代码“ AAA”。
我试过了:
SELECT disctinct(ID) from tableA where code <> 'AAA'
但这会返回ID 1、2和3。我不确定group by是否会起作用,因为我什至都不希望返回ID 1和2。
尝试使用NOT IN
:
SELECT ID
FROM TableA
WHERE ID NOT IN(SELECT ID
FROM TableA
WHERE CODE='AAA')
IN
确定指定的值是否与子查询或列表中的任何值匹配。 在这里阅读更多。
说明:
内部查询会选择所有ID为CODE=AAA
ID。 外部查询将选择内部查询未返回的所有ID。
即,使用给定的数据,内部查询将返回(1,2)。 外部查询将选择不在(1,2)中的ID,这当然是3。
这将返回给定ID的所有行:
select *
from tab as t1
where not exists
(select * from tab as t2
where t1.id = t2.id
and code = 'AAA')
而这只是不含“ AAA”的ID:
select id
from tab
group by id
having count(case when code = 'AAA' then 1 end) = 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.