【问题标题】:SQL filter for rows in same table with nonmatching column combinationSQL 过滤同一表中具有不匹配列组合的行
【发布时间】:2014-11-20 10:35:20
【问题描述】:

我遇到了以下问题。让我们假设这张表: 数据库为HSQLDB

TABLE1
A    B

1    10
2    11
1    10
1    12 <---- not matching previous rows (B=10 is expected for A=1)
3    9
2    11

我想确保过滤所有具有“乱序”A、B 对的行。所以在这种情况下,结果将是:

1    10
1    10
1    12

我想出了以下方法:

SELECT * FROM
(SELECT * FROM TABLE1) INNER JOIN
(SELECT A as A2, B as B2 FROM TABLE1) ON A=A2
WHERE B!=B2

但这有点难看,因为如果表中有很多与 A 列匹配的条目,则会进行很多连接。您将如何解决这个问题?

【问题讨论】:

    标签: sql join filter hsqldb


    【解决方案1】:

    由于您想识别有多个B 的任何列A,您可以使用COUNT 来做到这一点:

    SELECT A, Count(B) as ct
    FROM TABLE1
    GROUP BY A
    HAVING ct > 1
    

    不幸的是,为了撤回B 列,您需要再次引用该集合:

    SELECT A, B 
      FROM TABLE 1
      JOIN (
          SELECT A, Count(B) as Ct
          FROM TABLE1
          GROUP BY A
          Having ct > 1) identify on TABLE1.A = identify.A;
    

    【讨论】:

      【解决方案2】:
      SELECT * FROM TABLE1 t1 WHERE EXISTS(
        SELECT * FROM TABLE1 t2 WHERE t1.A=t2.A AND t1.B<>t2.B
      )
      

      【讨论】:

        猜你喜欢
        • 2017-09-07
        • 2023-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-27
        • 1970-01-01
        • 1970-01-01
        • 2020-01-23
        相关资源
        最近更新 更多