2016-05-21 56 views
0

我有這個表的結構:刪除MySQL的重複,但保持一個

+----+-------+ 
| ID | phone | 
+----+-------+ 
| 3 | 000 | 
| 4 | 111 | 
| 5 | 111 | 
| 8 | 222 | 
| 9 | 333 | 
+----+-------+ 

我知道,我可以顯示與此SQL重複行:

SELECT * FROM TablePhones GROUP BY phone having count(*) > 1 

,但我需要它刪除SQL命令所有重複但保留那個具有最高ID的行。

你能幫助我嗎? :)

回答

0

您可以通過從重複項中獲取最大ID並然後刪除不匹配的記錄來完成此操作。這裏有一個例子:

DELETE FROM TablePhones TP 
INNER JOIN (
    SELECT MAX(id) id, T.phone 
    FROM TablePhones T 
    INNER JOIN (
    SELECT phone 
    FROM TablePhones 
    GROUP BY phone 
    HAVING COUNT(1) > 1 
) Subq 
    ON T.phone = Subq.phone 
) SS 
ON TP.phone = SS.phone 
    AND TP.ID <> SS.ID 

這裏,SUBQ選擇採集到的電話號碼是重複的,則SS子查詢然後獲取這些記錄最大ID。最後刪除將選擇符合手機的記錄,但ID不會與此代碼相匹配MAX ID

+0

我得到這個錯誤: #1064 - 由''TP INNER JOIN( SELECT MAX語法錯誤(id)id,T.phone FROM TablePhones T INNER JOI'in line 1' – Stack108