京東聯盟開發(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)

 

最后,再用搜索重復記錄的腳本搜索驗證一下,發現沒有重復的了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM