问题描述
我有一个 sql 表,如下所示。我想为所有具有 B1 的 ColA 找到缺失的 B2。
Id | ColA | ColB |
---|---|---|
1 | A1 | B1 |
2 | A1 | B2 |
3 | A2 | B1 |
4 | A3 | B1 |
预期结果:A2,A3
解决方法
不确定这是您所期望的。
select ColA from table where ColB = 'B1'
and ColA not in (select ColA from table where ColB = 'B2')
,
如果您的数据库支持 WITH
,那么您可以:
WITH
with_b1 AS (SELECT DISTINCT ColA FROM t WHERE ColB = 'B1'),with_b2 AS (SELECT DISTINCT ColA FROM t WHERE ColB = 'B2')
SELECT ColA
FROM with_b1
WHERE ColA NOT IN (SELECT ColA FROM with_b2)
否则试试
SELECT ColA
FROM (SELECT DISTINCT ColA FROM t WHERE ColB = 'B1')
WHERE ColA NOT IN (SELECT ColA FROM t WHERE ColB = 'B2')
,
您需要 GROUP BY
和 HAVING
如下:
select colA
from your_Table t
group by colA
Having count(distinct colB) <> (select count(distinct tt.colB) from your_Table tt)