需求为删除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 )