查找同一表中缺失的行

问题描述

我有一个 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 BYHAVING 如下:

select colA
 from your_Table t
group by colA
Having count(distinct colB) <> (select count(distinct tt.colB) from your_Table tt)