2014-02-12 21 views
0

我在表中有幾個字段,但希望刪除一些記錄。我會稱它們爲重複的,但它們並不真實。跨兩個字段的SQL複製

表和一些示例數據

Id1 Id2 Name1 Name2 DOB1  DOB2 
123, abc, jones, smith, 19740901, 19820101 
abc, 123, smith, Jones, 19820101, 19740901 
def, 456, davis, short, 19720101, 20011010 
456, def, short, davis, 20011010, 19720101 

我想要做的就是刪除每個的「重複」記錄爲完全一樣的另一之一,但與「1列」用換位「2欄」。任何幫助將不勝感激。

+0

問題不明確。對於你顯示的數據,期望的結果是什麼? –

回答

3

這裏是這樣做的標準SQL的方式:

delete from t 
    where Id1 > Id2 and 
      exists (select 1 
        from t t2 
        where t2.Id1 = t.Id2 and 
         t2.Id2 = t.Id1 and 
         t2.Name1 = t.Name2 and 
         t2.Name2 = t.Name1 and 
         t2.DOB1 = t.DOB2 and 
         t2.DOB2 = t.DOB1 
       ); 
0

你可以使用一個INNER JOIN配對了換位Id1Id2值的任何行,篩選到那些真正複製,所有選擇,但其中一個重複行,然後將結果發送到DELETE

DELETE T1 
FROM [TableName] T1 
-- Pair up the duplicate rows 
INNER JOIN [TableName] T2 
    ON T1.Id1 = T2.Id2 
    AND T1.Id2 = T2.Id1 
WHERE T1.Id1 > T1.Id2 -- Only delete the row with the higher "Id1" value 
-- Filter out any rows that are not actually duplicates 
AND T1.Name1 = T2.Name1 
AND T1.Name2 = T2.Name2 
AND T1.Name2 = T2.Name2 
AND T1.DOB1 = T2.DOB1 
AND T1.DOB2 = T2.DOB2 
0

從測試 刪除其中ID1中( 選擇a.id1 從測試一個內連接測試B上a.id1 = b.id2和a.id2 = b.id1和a.id1 < b .id1)

請務必注意,此代碼不會刪除id1 = id2的記錄。