2016-01-20 86 views
0

我想刪除我的表的一些重複行。我開始通過執行這個查詢選擇所有重複的行:如何刪除一些重複的行

SELECT a.id as id FROM table A join table B on A.site = B.site 
where A.nb_affichages = B.nb_affichages and A.nb_clics = A.nb_clics 

然後我試着從第一個查詢刪除所有選擇的IDS:

DELETE FROM table WHERE id IN (SELECT * FROM (SELECT a.id as id FROM table A join table B on A.site = B.site 
where A.nb_affichages = B.nb_affichages and A.nb_clics = A.nb_clics) AS p) 

這第二個查詢刪除所有行在第一個選擇,而不是我想讓一行和刪除其他人。

所以任何人都可以幫助我優化這個查詢。

回答

2

它將保留重複值的第一個數據,並將刪除重複值的所有其餘值。

DELETE c1 
FROM table c1, table c2 
WHERE c1.nb_affichages = c2.nb_affichages 
AND c1.nb_clics = c2.nb_clics 
AND c1.site = c2.site 
AND c1.id > c2.id; 
+1

爲什麼條件'A.site = B.site'被刪除? – mnv

+1

我沒有看到這種情況。我將編輯@mnv。感謝您指出。 –