解决MySQL删除重复数据时导致的错误

针对MySQL的You can’t specify target table for update in FROM clause错误的解决方法

举例需求:现在user表中有6条数据,删除重复的数据,最后留下 4 李四 5张三 6王五

id name
1 张三
2 李四
3 王五
4 李四
5 张三
6 王五
1
2
3
4
5
DELETE 
FROM
USER
WHERE
ID NOT IN ( SELECT MAX( ID ) AS ID FROM USER GROUP BY NAME )

首先看上去这条语句是对的,也没啥逻辑问题,但是就是报错了

1
2
> 1093 - You can't specify target table 'USER' for update in FROM clause
> 时间: 0s

因为平时在Oracle中这样操作是没有问题的,直接就可以执行成功。查阅相关资料才知道,MySQL不能用同一表中查询的数据作为同一表的更新数据,所以解决方法只能靠中间表来实现

1
2
3
4
5
DELETE 
FROM
USER
WHERE
ID NOT IN (SELECT ID FROM ( SELECT MAX( ID ) AS ID FROM USER GROUP BY NAME ) A )
1
2
> Affected rows: 3
> 时间: 0.004s

执行成功

id name
4 李四
5 张三
6 王五

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!