需求爲刪除mysql數據庫中重複數據,保留第一條
初步代碼爲:
DELETE
FROM
base_phone_lable
WHERE
phone IN (
SELECT
phone
FROM
base_phone_lable
GROUP BY
phone
HAVING
count(phone) > 1
)
AND id NOT IN (
SELECT
min(id)
FROM
base_phone_lable
GROUP BY
phone
HAVING
count(phone) > 1
)
運行報錯
[Err] 1093 - You can't specify target table 'base_phone_lable' for update in FROM clause
意思爲不能在查詢該字段的同時修改該字段
搜索得到解決方式爲,將查詢嵌套爲孫子嵌套就可解決,解決代碼爲
DELETE
FROM
base_phone_lable
WHERE
phone IN (SELECT a.phone FROM(
SELECT
phone
FROM
base_phone_lable
GROUP BY
phone
HAVING
count(phone) > 1
) as a)
AND id NOT IN (SELECT b.minid FROM(
SELECT
min(id) as minid
FROM
base_phone_lable
GROUP BY
phone
HAVING
count(phone) > 1
) as b )