【问题标题】:Is there a clean way of cleaning up duplicate entries in MySQL?有没有一种清理 MySQL 中重复条目的干净方法?
【发布时间】:2010-09-20 05:41:52
【问题描述】:

在一个表中,我有三列 - id、name 和 count。很多名称列是相同的(由于早期缺少 UNIQUE),我想解决这个问题。但是,其他(我认为 4 或 5 个 - 我将不得不检查文档)表使用 id 列来查找名称,并且仅删除它们会破坏事情。那么有没有一种好的、简洁的方式来表达“找到所有相同的记录并将它们合并在一起”?

【问题讨论】:

    标签: sql mysql dirty-data


    【解决方案1】:

    这类问题时不时出现。不,没有真正干净的方法来做到这一点。您必须先更改子表中依赖于父表中不需要的值的所有行,然后才能消除父表中不需要的行。

    MySQL 支持多表 UPDATEDELETE 语句(与其他品牌的数据库不同),因此您可以执行以下一些非常巧妙的技巧:

    UPDATE names n1
      JOIN names n2 ON (n1.id < n2.id AND n1.name = n2.name)
      JOIN child_table c ON (n2.id = c.id)
    SET c.name_id = n1.id
    ORDER BY n1.id DESC;
    

    在所有子表上完成此操作后,您可以使用 MySQL 的多表 DELETE 语法删除父表中不需要的行:

    DELETE FROM n2
      USING names n1 JOIN names n2 ON (n1.id < n2.id AND n1.name = n2.name);
    

    【讨论】:

      【解决方案2】:

      为什么你不能做类似的事情

      update dependent_table set name_id = <id you want to keep> where name_id in (
          select id from names where name = 'foo' and id != <id you want to keep>)
      

      【讨论】:

        猜你喜欢
        • 2022-08-11
        • 2012-10-14
        • 1970-01-01
        • 2020-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-12
        相关资源
        最近更新 更多