mysql删除重复数据报错_Mysql删除重复数据

文章时间: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值