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如何删除重复数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)