对具有不匹配列组合的同一表中的行的SQL筛选器

时间:2014-09-25 15:20:36

标签: sql join filter hsqldb

我遇到了以下问题。我们假设这个表: 数据库是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

但这有点难看,因为如果表格中有很多匹配的条目,那么很多联接就会产生。你会如何处理这个问题?

2 个答案:

答案 0 :(得分:2)

由于您要识别有多个A的任何列B,您可以使用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;

答案 1 :(得分:1)

SELECT * FROM TABLE1 t1 WHERE EXISTS(
  SELECT * FROM TABLE1 t2 WHERE t1.A=t2.A AND t1.B<>t2.B
)