• mysql 删除表中多余的重复记录


    ===============================================

     2019/7/16_第1次修改                       ccb_warlock

     

    ===============================================

    接着上一个话题(https://www.cnblogs.com/straycats/p/11198340.html),做完了表结构和表内容的备份后,接着就需要删除数据。

    然而在删除数据的过程中发现,存在多条相同的业务数据记录到了数据库中(表现为,除了索引字段,其他所有字段的内容完全一致)。这样就导致原本的线性增加趋势更明显,脏数据不仅浪费了空间,更影响了查询的效率。

    故还是通过sql语句的处理还删除那些逻辑上重复的数据。

    daily_t表结构如下:

    字段名 描述
    TID 索引id
    USER_ID 用户id
    STATS_DATE 日期

     

    查看要删除的重复记录(在删除数据前先做查询确认范围)

    SELECT *
    FROM   daily_t
    WHERE  (USER_ID, STATS_DATE) IN (
           SELECT *
           FROM   (SELECT   USER_ID, STATS_DATE
                   FROM     daily_t
                   GROUP BY USER_ID, STATS_DATE
                   HAVING   count(*) > 1) A)
    AND    TID NOT IN (
            SELECT *
            FROM   (SELECT   min(TID)
                    FROM     daily_t
                    GROUP BY USER_ID, STATS_DATE
                    HAVING   count(*) > 1) B)
    ORDER BY USER_ID, STATS_DATE;

     

    删除重复的记录(只留有索引最小的记录)

    DELETE
    FROM   daily_t
    WHERE  (USER_ID, STATS_DATE) IN (
           SELECT *
           FROM   (SELECT   USER_ID, STATS_DATE
                   FROM     daily_t
                   GROUP BY USER_ID, STATS_DATE
                   HAVING   count(*) > 1) A)
    AND    TID NOT IN (
            SELECT *
            FROM   (SELECT   min(TID)
                    FROM     daily_t
                    GROUP BY USER_ID, STATS_DATE
                    HAVING   count(*) > 1) B);

    PS.sql语句中之所以对子查询多嵌套了一层(select *)是为了规避mysql不支持在where中进行针对需要删除操作的表的子查询(1093-You can’t specify target table for update in FROM clause),因为多嵌套了一层(select *)后,子查询内操作的是两张临时表A、B,而不是daily_t。

     

     

  • 相关阅读:
    crs_stop 错误一列
    本地管理表空间和字典管理表空间的特点,ASSM有什么特点
    RAC 11.2的新特性
    oracle 11g RAC 的一些基本概念(三)
    【1】【leetcode-130】 被围绕的区域
    【leetcode-125】 验证回文串
    【1】【leetcode-127】单词接龙word-ladder
    【1】【leetcode-115】 不同的子序列 distinct-subsequences
    【1】[leetcode-124] 二叉树中的最大路径和
    [leetcode-128] 最长连续序列
  • 原文地址:https://www.cnblogs.com/straycats/p/11198401.html
Copyright © 2020-2023  润新知