Mysql删除重复数据并保留一条
程序员文章站
2022-03-04 18:42:52
...
需要将表中重复的数据删除,并且保留一条。
如下,要删除un=aa的数据
测试数据:
思路:
找出un=aa的所有记录,删除非记录中主键最大值的数据。
DELETE FROM tb_user WHERE id <> (SELECT max(id) FROM tb_user) AND un='aa'
报错如下:
You can’t specify target table ‘tb_user’ for update in FROM clause
原因:
不能依照同一张表中select的数据来对同一张表进行update操作。
解决:
将子select到的数据放入零时表,通过零时表选择最大id。
DELETE FROM tb_user WHERE id <> (SELECT max(id) FROM (SELECT id FROM tb_user WHERE un='aa') ) AND un='aa'
报错:
Every derived table must have its own alias
原因:
子查询出的表明必须指定别名。
解决:
指定一个别名即可。
DELETE FROM tb_user WHERE id <> (SELECT max(AA.id) FROM (SELECT id FROM tb_user WHERE un='aa') AS AA) AND un='aa'
结果:
成功,Perfect!