• 技术文章 >数据库 >mysql教程

    讲解mysql如何删除重复数据

    藏色散人藏色散人2022-01-23 09:17:30转载745
    本篇文章给大家介绍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如何删除重复数据的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:learnku,如有侵犯,请联系admin@php.cn删除
    专题推荐:mysql
    上一篇:聊聊MySQL中的聚合函数,实践掌握分页查询! 下一篇:MySQL中如何查询字段注释?盘点和对比下5 种方法!
    千万级数据并发解决方案

    相关文章推荐

    • 一起聊聊MySQL数据查询太多会OOM吗• MySQL忘记密码的解决方法:无密码登录并重置root密码• 一起聊聊mysql的timestamp会存在时区问题• 聊聊MySQL中的聚合函数,实践掌握分页查询!
    1/1

    PHP中文网