Mysql刪除重復數據保留最小的id


在網上查找刪除重復數據保留id最小的數據,方法如下:

 1 DELETE
 2 FROM
 3     people
 4 WHERE
 5     peopleName IN (
 6         SELECT
 7             peopleName
 8         FROM
 9             people
10         GROUP BY
11             peopleName
12         HAVING
13             count(peopleName) > 1
14     )
15 AND peopleId NOT IN (
16     SELECT
17         min(peopleId)
18     FROM
19         people
20     GROUP BY
21         peopleName
22     HAVING
23         count(peopleName) > 1
24 )

自己使用的時候顯示報錯:

1 delete from tb where id in (SELECT max(id) from tb GROUP BY user HAVING count(user)>1)

[Err] 1093 - You can't specify target table ‘XXX’ for update in FROM clause

暫時不知道是什么原因導致的。

然后想辦法分布操作,首先篩選出有重復user的數據,然后用max()選出其中較大的那一行:

SELECT max(id) from tb GROUP BY user HAVING count(user)>1

然后再根據得到的max(id)逐條刪除多余的數據

1 delete from tb where id=xx

是個笨方法,暫時先解決問題吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM