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

Sql 根据另一列中的值,选择一个ID存在多行的不同记录,sql,Sql,所以我不确定我的标题是正确的还是误导性的。这听起来很简单,但我搞不懂,也没有找到一个好的例子 我想从ID与特定代码不匹配的表中选择不同的ID。例如,我有如下表格: 表 ID Code ==== ==== 1 AAA 1 BBB 1 CCC 2 AAA 2 DDD 2 EEE 3 BBB 3

所以我不确定我的标题是正确的还是误导性的。这听起来很简单,但我搞不懂,也没有找到一个好的例子

我想从ID与特定代码不匹配的表中选择不同的ID。例如,我有如下表格:

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。我不确定分组方式是否有效,因为我甚至不想返回ID 1和ID 2。

尝试使用not IN:

中确定指定的值是否与子查询或列表中的任何值匹配。阅读更多

说明:

内部查询选择所有代码为AAA的ID。外部查询将选择内部查询返回的结果中不包含的所有ID

i、 例如,对于给定的数据,内部查询将返回1,2。外部查询将选择不在1,2中的ID,当然是3。

尝试使用不在:

中确定指定的值是否与子查询或列表中的任何值匹配。阅读更多

说明:

内部查询选择所有代码为AAA的ID。外部查询将选择内部查询返回的结果中不包含的所有ID


i、 例如,对于给定的数据,内部查询将返回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

这将返回给定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

您不必使用HTML格式化代码。使用“代码示例”选项,工具栏中带有{或ctrl+k的图标将视为代码段,并且suyntax将其高亮显示。您不必使用HTML格式化代码。使用“代码示例”选项,工具栏中带有{或ctrl+k的图标将视为代码段,并且suyntax将其高亮显示。