我必须编写一个查询来从表T
获取结果集表T
定义为
我需要获取列As中具有相同值的行,并且在列Cs中也具有相同的值。如何编写查询? (使用通用SQL查询)
答案 0 :(得分:2)
使用:
SELECT a.PrimaryKey, b.PrimaryKey
FROM T a
INNER JOIN T b
ON a.columnA = b.columnA
AND a.columnC = b.columnC
AND a.PrimaryKey < b.PrimaryKey
这将为所有行提供行(只有一次使用不等式条款)。
如果那太多(有三对A-B,A-C,B-C),标准SQL也可以限制左键是组的最小键(你会然后只获得A-B和A-C):
SELECT a.PrimaryKey, b.PrimaryKey
FROM T a
INNER JOIN T b
ON b.columnA = a.columnA
AND b.columnC = a.columnC
LEFT JOIN T c
ON c.columnA = a.columnA
AND c.columnC = a.columnC
AND c.PrimaryKey < a.PrimaryKey
WHERE a.PrimaryKey < b.PrimaryKey
AND c.PrimaryKey IS NULL
答案 1 :(得分:1)
要查找表中有重复的元组A,C,您可以使用
SELECT A, C, count(*)
FROM T
GROUP BY A, C
HAVING count(*) >=2
现在,您可以从表T中选择在此“重复”集中具有A,C的所有行。
Select PrimaryKey, A, B, C
FROM T JOIN
(SELECT A, C, count(*)
FROM T
GROUP BY A, C
HAVING count(*) >=2
) dupl
on T.A = dupl.A and T.C = dupl.C