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如何删除重复数据的详细内容。