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

网友投稿 1190 2022-11-19

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

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

重复记录

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

id

url

1

a.com

2

a.com

3

a.com

4

b.com

5

b.com

6

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

a.com

4

b.com

6

c.com

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:jmeter正则表达式的使用
下一篇:Windows程序设计-GDI图形
相关文章

 发表评论

暂时没有评论,来抢沙发吧~