如何解决SQL查询多对多排他IN查询
我有一个表Table1,其中有A列和B列(很多表)。
|---------------------|------------------|
| ColumnA | ColumnB |
|---------------------|------------------|
| a1 | b1 |
|---------------------|------------------|
| a1 | b2 |
|---------------------|------------------|
| a2 | b1 |
|---------------------|------------------|
| a2 | b3 |
|---------------------|------------------|
| a3 | b2 |
|---------------------|------------------|
我想要一个A
个列表,其中B
个仅在B
个列表中。
因此,在上表中,如果列表为[b1,b2]
期望 [a1,a3]
不包括a2
,因为它也与b3
相关联。
解决方法
您可以使用聚合并具有:
select a
from ab
group by a
having sum(case when b not in ('b1','b2') then 1 else 0 end) = 0;
having
子句正在检查列表中 not 的行数。 = 0
说没有。
假设2*j
中没有空值,则可以使用ColumnB
:
NOT EXISTS
如果只需要select t.*
from tablename t
where not exists (select 1 from tablename where ColumnA = t.ColumnA and ColumnB not in ('b1','b2'))
的不同值:
ColumnA
请参见demo。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。