所以我不确定我的头衔是否正确或误导。这听起来很简单,但我无法弄清楚,并没有找到一个好的例子。
我想从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。
答案 0 :(得分:3)
尝试使用NOT IN
:
SELECT ID
FROM TableA
WHERE ID NOT IN(SELECT ID
FROM TableA
WHERE CODE='AAA')
IN
确定指定的值是否与子查询或列表中的任何值匹配。阅读更多here。
<强>解释强>
内部查询选择所有ID为CODE=AAA
的ID。外部查询将选择内部查询不在结果返回中的所有ID。
即,使用给定的数据,内部查询将返回(1,2)。外部查询将选择不在(1,2)中的ID,其中当前为3。
答案 1 :(得分:2)
返回给定id的所有行:
select *
from tab as t1
where not exists
(select * from tab as t2
where t1.id = t2.id
and code = 'AAA')
这只是没有'AAA'的ids:
select id
from tab
group by id
having count(case when code = 'AAA' then 1 end) = 0