mysql刪除重復數據只保留id最大一條記錄


目的: 一張表,表名 credit_user

相同的 user_code有多條重復數據,現在只保留一條數據

一:首先是這么想的

DELETE
FROM
credit_user
WHERE
user_code IN (
SELECT
user_code
FROM
credit_user
GROUP BY
user_code
HAVING
count(user_code) > 1
) and id NOT IN (
SELECT
min(id)
FROM
credit_user
GROUP BY
user_code
HAVING
count(user_code) > 1
);

 

發現在mysql中會報錯

錯誤信息:[Err] 1093 - You can't specify target table 'credit_user' for update in FROM clause

於是查資料說是不能先select出同一表中的某些值,再update這個表(在同一語句中) 

二:正確寫法

DELETE
FROM
credit.credit_user
WHERE
user_code IN (
SELECT * FROM (
SELECT
user_code
FROM
credit_user
GROUP BY
user_code
HAVING
count(user_code) > 1
) b
) and id NOT IN (
SELECT * FROM (
SELECT
min(id)
FROM
credit_user
GROUP BY
user_code
HAVING
count(user_code) > 1
) c
);

 

也就是說將select出的結果再通過中間表select一遍,這樣就規避了錯誤。注意,這個問題只出現於mysql


免責聲明!

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



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