使用SQL查询查找多列相同的行

时间:2011-09-06 06:42:30

标签: sql

我必须编写一个查询来从表T

获取结果集

T定义为

  • 主键
  • A栏
  • B栏
  • C栏

我需要获取列As中具有相同值的行,并且在列Cs中也具有相同的值。如何编写查询? (使用通用SQL查询)

2 个答案:

答案 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