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的话需要处理一下,这里就不再展示了。
如果有问题的话,欢迎各位大佬指出,也欢迎大家提出其它方法,一起讨论一起进步。

猜你喜欢

转载自blog.csdn.net/weixin_55549435/article/details/114057987
今日推荐