mysql实现删除某一列的重复数据(只留一行或全部删除)

事例数据库

其中  第一列为id(主键),弟2列为file_id,弟3列为file_name

 

只包留一行

我们要想删除掉重复的数据

弟一步

先筛选出来哪些数据重复了

我们可以先将表中的数据以目标字段(这里是file_id)进行分组聚类,然后找出每一组的最小ID(或最大ID)并将这些ID放入一个临时表t(可以随意命名这里是t)中

于是我们就有了以下代码

id:表的主键

klx.file_id_name:表名

file_id:包含重复项的字段

SELECT t.id FROM ((select MIN(id) id from klx.file_id_name group by file_id) as t)

弟2步

通过第1步,我们已经找出了各行中最大的id值,并将它放到一个临时表t中了

这时候我们就可以想到,如果有一项是重复两次或以上的,那么此项应该有两个或以上不同的id值

而我们临时表存的只是最小的那个id值,反过来,如果有一项是不重复的,那么它应该有唯一的一个id值,并且这个id值,也一定是最小的id值,也一定在我们的临时表t中

于是:

其中关键字印是判断file_id_name表中的id是否在临时表t之中,如果不存在则将此项删除,这样我们就过滤掉了重复的项

DELETE FROM file_id_name WHERE id not in(SELECT t.id FROM ((select MIN(id) id from klx.file_id_name group by file_id) as t))

 结果截图

重复的全部删除(一项都不留)

代码如下

DELETE FROM WHERE SELECT t.file_id,t.count_ FROM ((select file_id,COUNT(file_id) count_ from klx.file_id_name group by file_id) as t) where t.count_>1

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桂亭亭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值