Mysql删除重复数据并保留一条

需要将表中重复的数据删除,并且保留一条。

如下,要删除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!

posted @ 2018-09-08 15:44  SEC.VIP_网络安全服务  阅读(114)  评论(0编辑  收藏  举报