文章时间:2020年3月8日 19:27:36
解决问题:删除表中的重复数据
基于数据库:Mysql 5.7 version
查询重复数据
SELECT openid,COUNT(openid) FROM 表名 GROUP BY openid HAVING COUNT(openid) > 1
Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)
上面提供两种写法,直接复制粘贴替换相应的字段即可。
删除重复数据
删除全部的重复数据(注意! 注意! 注意! 这是全部删除,不是只保留一条的,只保留一条的继续看后面)
DELETE FROM 表名 WHERE dname IN ( SELECT t.字段名 FROM ( select 字段名 FROM 表名 GROUP BY 字段名 HAVING count(1) > 1 ) t )
只保留一条,去掉重复的数据(执行效率我没做测试,能实现,效率自己测试下吧)
DELETE FROM 表名 WHERE 这里写你的表id NOT IN ( SELECT t.minno FROM ( SELECT MIN(id) AS minno FROM 表名 GROUP BY 字段名 ) t )
不解的报错
[Err] 1093 - You can't specify target table 'dept' for update in FROM clause
原因:更新这个表的同时又查询了这个表,查询这个表的同时又去更新了这个表,可以理解为死锁。mysql不支持这种更新查询同一张表的操作。所以我们用生成临时表去操作,上面的语句就是这么写的。复制即可。
参考文献
mysql删除重复记录并且只保留一条:
https://blog.csdn.net/n950814abc/article/details/82284838
PostgreSQL中删除重复行(保留一行):
https://blog.csdn.net/ljy520yzy/article/details/8631264
来自:https://cloud.tencent.com/developer/article/1595715
本站文章除注明转载/出处外,均为原创,若要转载请务必注明出处。转载后请将转载链接通过邮件告知我站,谢谢合作。本站邮箱:admin@only4.work
尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。