這篇文章主要講解了“MySQL怎么刪除重復數據”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“mysql怎么刪除重復數據”吧!
創新互聯公司是專業的章丘網站建設公司,章丘接單;提供成都網站建設、成都做網站,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行章丘網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!
sku對應的重量表,應該一個sku_id 對應唯一 一條重量數據,由于程序錯誤導致出現一樣的冗余數據。只保留一條,其他的刪除。
字段 | 說明 |
---|---|
id | 自增 |
sku_id | sku_id標識 |
weight | 重量 |
假設表名:weight
查詢有重復數據的列表
SELECT sku_id,COUNT(id) FROM weight GROUP BY sku_id HAVING COUNT(sku_id) > 1
查詢重復數據里面每個最小的id
SELECT min(id) FROM weight GROUP BY sku_id HAVING COUNT(sku_id) > 1
查詢去掉重復數據最小id的其他數據
SELECT id,sku_id FROM weight WHERE sku_id IN( SELECT sku_id FROM weight GROUP BY sku_id HAVING COUNT(sku_id) > 1)AND id NOT IN( SELECT MIN(id) FROM weight GROUP BY sku_id HAVING COUNT(sku_id) > 1)
刪除去掉重復數據最小id的其他數據
DELETE FROM weight WHERE sku_id IN( SELECT sku_id FROM weight GROUP BY sku_id HAVING COUNT(sku_id) > 1)AND id NOT IN( SELECT MIN(id) FROM weight GROUP BY sku_id HAVING COUNT(sku_id) > 1)
原因是:刪除這個表的同時又查詢了這個表,查詢這個表的同時又去刪除了這個表,可以理解為死鎖。mysql不支持這種刪除查詢同一張表的操作
錯誤代碼: 1093You can't specify target table 'weight' for update in FROM clause
解決辦法如下:把要刪除的數據查詢出來做為一個第三方表,然后篩選刪除。
DELETE FROM `weight` WHERE sku_id IN( SELECT sku_id FROM (SELECT sku_id FROM `weight` GROUP BY sku_id HAVING COUNT(sku_id) > 1) table1)AND id NOT IN ( SELECT id FROM (SELECT MIN(id) AS id FROM `weight` GROUP BY sku_id HAVING COUNT(sku_id) > 1) table2)
更新也和上面操作原理相同。
感謝各位的閱讀,以上就是“mysql怎么刪除重復數據”的內容了,經過本文的學習后,相信大家對mysql怎么刪除重復數據這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創新互聯,小編將為大家推送更多相關知識點的文章,歡迎關注!
分享文章:mysql怎么刪除重復數據
標題網址:http://vcdvsql.cn/article28/pejdcp.html
成都網站建設公司_創新互聯,為您提供、網站制作、App設計、企業網站制作、面包屑導航、網站導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯