我正在搜索以下pseodo代码的实现:
SELECT A, B, C
FROM X
HAVING COUNT(A,B) > 1
以下是代码应该执行的示例:
假设表格X如下所示:
A B C D
--------------
1 1 0 2
1 1 1 1
2 1 1 0
第一行和第二行在A列和B列中具有相同的条目,第三列在列B中相同但在列A中不同。所需的输出是第1行和第2行的列A,B和C:
1 1 0
1 1 1
如何实施?我的pseodo代码的问题是,COUNT接受单个列或所有列(*),但它不能占用4列中的两列。 GROUP BY具有相同的属性。
答案 0 :(得分:0)
对于支持分析功能的RDMS,您可以执行
SELECT a,b,c
FROM
(
SELECT a, b, c, count(1) OVER(PARTITION BY a,b) cnt
FROM X
)t1
WHERE t1.cnt >1
如果分析/窗口功能不可用,join
应该完成工作
SELECT t1.a, t1.b, t1.c
FROM X t1
INNER JOIN
(
SELECT a,b
FROM X
GROUP BY a,b
HAVING COUNT(1) >1
)t2 ON (t2.a=t1.a AND t2.b=t1.b)
答案 1 :(得分:0)
您可以使用exists
子句执行此操作。这应该适用于所有数据库:
select a, b, c
from x
where exists (select 1
from x x2
where x.a = x2.a and x.b = x2.b and x.c <> x2.c
);
这假设行具有不同的c
值。
这对于x(a, b)
上的索引效果最佳。