0
点赞
收藏
分享

微信扫一扫

mysql删除重复记录并且只保留一条 You can't specify target table `tb` for update in FROM clause


重复记录

如果不设置唯一索引约束,很容易插入重复数据,例如表单重复提交。

id

url

1

www.a.com

2

www.a.com

3

www.a.com

4

www.b.com

5

www.b.com

6

www.c.com

这时候就不可避免的要把重复记录删掉。
首先要查出来哪些是不重复的数据:

SELECT MIN(id) id FROM `tb` GROUP by

用​​GROUP BY​​​分组数据,并用​​MIN​​​查找分组记录中最新的id。
然后再用​​​DELETE​​删掉不在这里面的那些数据。

DELETE FROM tb WHERE id NOT IN (SELECT * FROM (SELECT MIN(id) id FROM `tb` GROUP by url) tb1)

报错

You can't specify target table `tb` for update in FROM clause

这是因为更新和查询不能同时进行,有死锁。
解决办法就是把查询结果放到临时表里。

DELETE FROM tb WHERE id NOT IN (SELECT * FROM (SELECT MIN(id) id FROM `tb` GROUP by url) tb1)

id

url

1

www.a.com

4

www.b.com

6

www.c.com


举报

相关推荐

0 条评论