我遇到了以下问题。我们假设这个表:
数据库是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
但这有点难看,因为如果表格中有很多匹配的条目,那么很多联接就会产生。你会如何处理这个问题?
答案 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
)