微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

讲解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视频教程

原文地址:https://www.jb51.cc/mysql/1208147.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐