目的: 一張表,表名 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