2011-09-06 76 views
1

我要編寫一個查詢得到的結果從表T設置找到行的多個列相同使用SQL查詢

其中表T被定義爲

  • 主鍵
  • A列
  • 塔B
  • 塔C

我需要獲取在列As中具有相同值的行,並且在列Cs中也具有相同的值。如何編寫查詢? (使用通用SQL查詢)

回答

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 
+0

這兩個答案都很好,但我選擇了這個,因爲它適合我當前項目的需要。 – newguy

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