京东联盟开发(12)——删除MySQL表中重复记录并且只保留一条

本文介绍如何删除商品表中的一些重复记录。

有时,一条商品由于有多个skuid,比如某种手机有不同颜色,但价格、优惠等信息却是一致,导致其被多次收录。由于其各种条件基本类似,这样它在商品中多个sku都排一起。一方面影响占用了表的空间,另一方面给客户的效果也不美观。这里需要删除这些重复记录。

一、设定唯一标识

通过截取商品前面指定长度的字符,来给商品设定唯一标记。

SQL脚本如下

UPDATE `yhq_jdunion_goods3` SET `unionid` = LEFT(`goodsname`, 18);

二、搜索重复数据

搜索一下重复记录有多少条。SQL脚本如下

select `unionid`,count(*) as count from `yhq_jdunion_goods3` group by `unionid` having count>1

搜索后可以看到有很多重复商品

三、删除多余记录

SQL脚本如下

delete from `yhq_jdunion_goods3` where
id not in( select id from (select max(id) as id,count(`unionid`) as count from `yhq_jdunion_goods3`
group by `unionid` having count =1 order by count desc) as tab)
AND
id not in( select id from (select max(id) as id,count(`unionid`) as count from `yhq_jdunion_goods3`
group by `unionid` having count >1 order by count desc) as tab)

最后,再用搜索重复记录的脚本搜索验证一下,发现没有重复的了。

上一篇:whu oj 1551 Pairs (莫队算法)


下一篇:Spring源码解析——如何阅读源码