根据另一列中的值选择一个ID存在多行的不同记录

时间:2014-05-05 16:47:02

标签: sql

所以我不确定我的头衔是否正确或误导。这听起来很简单,但我无法弄清楚,并没有找到一个好的例子。

我想从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。

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