樓主的問(wèn)題是如何刪除重復(fù)數(shù)據(jù)僅保留其中一條,接下來(lái)就介紹一下如何實(shí)現(xiàn)該需求。
數(shù)據(jù)準(zhǔn)備示例表 Student_Information 如下 :
我們插入一部分?jǐn)?shù)據(jù)到該表,其中存在多條姓名為 Anaa 的手機(jī)號(hào)碼重復(fù)數(shù)據(jù),如下:
入庫(kù)后數(shù)據(jù)如下:
設(shè)計(jì)刪除SQL我們通過(guò)Group by對(duì)手機(jī)號(hào)進(jìn)行分組,然后計(jì)算每組最大ID作為保留數(shù)據(jù),然后刪除其他數(shù)據(jù)。SQL設(shè)計(jì)如下:
執(zhí)行該SQL,結(jié)果如下:
我們可以看到,該SQL刪除了重復(fù)的數(shù)據(jù)時(shí),并且保留了id最大的數(shù)據(jù)(最新數(shù)據(jù))。
設(shè)計(jì)該SQL時(shí)需要注意什么?我們需要注意,使用 MySQL 進(jìn)行 Delete From 操作時(shí),若子查詢的 FROM 字句和更新、刪除對(duì)象使用同一張表時(shí),會(huì)出現(xiàn)"You can't specify target table for update in FROM clause”。錯(cuò)誤。
比如,我們?cè)O(shè)計(jì)如下SQL,該SQL從語(yǔ)法來(lái)看也是實(shí)現(xiàn)刪除 Student_Information 表重復(fù)數(shù)據(jù),我們執(zhí)行一下看下結(jié)果。
執(zhí)行結(jié)果如下,我們可以看到拋出了"You can't specify target table for update in FROM clause”錯(cuò)誤,那么該如何解決呢?
解決這個(gè)問(wèn)題的方法也很簡(jiǎn)單,就是將 select 出的結(jié)果通過(guò)中間表再 select 一遍即可,如下: