【问题标题】:Find Missing Row in Same Table在同一个表中查找缺失的行
【发布时间】:2021-05-08 09:52:26
【问题描述】:

我有一个如下的 SQL 表。我想为所有具有 B1 的 ColA 找到缺少的 B2。

Id ColA ColB
1 A1 B1
2 A1 B2
3 A2 B1
4 A3 B1

预期结果:A2,A3

【问题讨论】:

  • 您能详细说明一下吗?
  • 您的研究向您展示了什么?你试过什么?请向我们展示您的尝试。
  • 为什么要同时标记 Oracle 和 SQL Server?是哪个?

标签: sql sql-server plsql plsqldeveloper


【解决方案1】:

不确定这是您所期望的。

 select ColA from table where ColB = 'B1' 
    and ColA not in (select ColA from table where ColB = 'B2')

【讨论】:

    【解决方案2】:

    如果你的数据库支持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')
    

    【讨论】:

      【解决方案3】:

      你需要GROUP BYHAVING如下:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多