SQL删除字段重复内容且保留唯一一条数据

遇到了一个挺有意思的sql问题,在实际应用中应该也会碰到这样的问题

在这里记录一下,加深印象。

有些表会有一些重复内容,要求我们将表中重复内容去除只剩唯一。直接上截图:
原表:
在这里插入图片描述

目标表:
在这里插入图片描述
去除原表中word字段内容的重复内容只保留一个,也保留与之对应的其它字段的数据。

初级方法一:

先查找出word字段重复的内容(这些内容需要进行删除)

select word from query_test group by  word having count(word)>1;

然后确定出这些重复内容需要保留的唯一值(通过id来确定)

select min(id) from query_test group by word having count(word)>1;
--word字段重复内容对应的最小id,有几个word重复,对应几个最小id

最后删除重复内容并保留唯一和不重复内容

delete from query_test where word in 
(select word from query_test group by word having count(word)>1) 
and id not in (select min(id) from query_test group by word having count(word)>1);

mysql这样写可能会报错(更新表不能引用自己的表),需要加别名处理一下:

delete from query_test where word in(select b.word from 
(select word from query_test group by word having count(word)>1) b) 
and id not in (select a.id from 
(select min(id) as id  from query_test group by word having count(word)>1)a);

进阶方法

大佬提出的方法,直接到位。

delete from query_test where id not in (select max(id) from query_test group by word);

同样,如果是mysql的话需要处理一下,这里就不再展示了。
如果有问题的话,欢迎各位大佬指出,也欢迎大家提出其它方法,一起讨论一起进步。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值