假如現(xiàn)在 MySQL數(shù)據(jù)庫有幾萬條記錄,由于某些原因?qū)е缕渲写嬖谝恍┲貜?fù)的記錄。那么如何刪除重復(fù)記錄只留其中一條呢?
比如,比如存在十條重復(fù)的記錄,需要刪除其它九條記錄,只保留一條記錄。
數(shù)據(jù)準(zhǔn)備
我們創(chuàng)建如下示例表, Student_Information 表創(chuàng)建 SQL如下 :

我們插入一部分?jǐn)?shù)據(jù)到該表,其中存在多條姓名為 Anaa 的手機(jī)號碼重復(fù)數(shù)據(jù),如下:

數(shù)據(jù)入庫后,我們通過 select * from Student_Information 查詢結(jié)果如下:

設(shè)計SQL
我們通過 Group by對手機(jī)號進(jìn)行分組,然后計算每組最大ID作為保留數(shù)據(jù),然后刪除其他數(shù)據(jù)。SQL設(shè)計如下:

執(zhí)行該SQL,結(jié)果如下:

我們可以看到,該 SQL刪除了重復(fù)的數(shù)據(jù)時,并且保留了id最大的數(shù)據(jù)(最新數(shù)據(jù))。
設(shè)計該SQL時需要注意什么?
我們需要注意,使用 MySQL 進(jìn)行 Delete From 操作時,若子查詢的 FROM 子句和刪除或更新對象使用同一張表時,會出現(xiàn)"You can't specify target table for update in FROM clause”。錯誤。
比如,我們設(shè)計如下SQL。該 SQL從語法來看也實現(xiàn)刪除 Student_Information 表重復(fù)數(shù)據(jù),我們執(zhí)行一下看下結(jié)果。

執(zhí)行結(jié)果如下,我們可以看到拋出了"You can't specify target table for update in FROM clause”錯誤,那么該如何解決呢?

解決這個問題的方法也很簡單,就是將 select 出的結(jié)果通過中間表再 select 一遍即可,如下:
