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