讲解mysql如何删除重复数据

本篇文章给大家介绍mysql怎么删除重复数据。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

sku对应的重量表,应该一个sku_id 对应唯一 一条重量数据,由于程序错误导致出现一样的冗余数据。只保留一条,其他的删除。

字段说明
id自增
sku_idsku_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如何删除重复数据的详细内容,更多请关注其它相关文章!