mysql删除表中的重复数据 和 MYSQL之You can't specify target table for update in FROM clause解决办法
这是我的数据表和数据
- 一个t_user表
错误的删除表中的重复数据
DELETE
FROM
t_user
WHERE
(username, `password`) IN (
SELECT
username,
`password`
FROM
t_user
GROUP BY
username,
`password`
HAVING
count(*) > 1
)
AND id NOT IN (
SELECT
min(id)
FROM
t_user
GROUP BY
username,
`password`
HAVING
count(*) > 1
)
这是报错结果:
意思是,不能先select出同一表中的值,然后再update这个表(在同一语句中)
解决方法就是:
select出的结果再通过中间表select一遍,这样就规避了错误,这样就相当于不在一张表中执行。大家请注意,这个问题只出现于mysql,mssql和oracle不会出现此问题。
DELETE
FROM
t_user
WHERE
(username, `password`) IN (
SELECT
a.username,
a.`password`
FROM
(
SELECT
username,
`password`
FROM
t_user
GROUP BY
username,
`password`
HAVING
count(*) > 1
) AS a
)
AND id NOT IN (
SELECT
a.id
FROM
(
SELECT
min(id) AS id
FROM
t_user
GROUP BY
username,
`password`
HAVING
count(*) > 1
) AS a
)
去重保留每组id值最小的
这是结果