【问题标题】:Remove repeat rows from MySQL table从 MySQL 表中删除重复行
【发布时间】:2010-02-10 11:18:18
【问题描述】:

有没有办法从 MySQL 数据库中删除所有重复行?

【问题讨论】:

  • “重复行”是什么意思,是指完全相同的行还是重复的列值?
  • 除了id之外的每一列都是一样的

标签: mysql


【解决方案1】:

几年前,有人要求提供一种删除重复项的方法。子选择使得在 MySQL 4.1 中这样的查询成为可能:

DELETE FROM some_table WHERE primaryKey NOT IN
(SELECT MIN(primaryKey) FROM some_table GROUP BY some_column)

当然,如果您想保留具有重复值的最新记录而不是具有重复值的最旧记录,您也可以使用MAX(primaryKey)

要了解其工作原理,请查看此查询的输出:

SELECT some_column, MIN(primaryKey) FROM some_table GROUP BY some_column

如您所见,此查询返回包含 some_column 的每个值的第一条记录的主键。那么,从逻辑上讲,在这个结果集中没有找到的任何键值都必须是重复的,因此应该删除它。

【讨论】:

    【解决方案2】:

    您可能会对这些问题/答案感兴趣:

    处理大桌子时经常使用的想法是:

    • 创建一个新表
    • 在该表中插入唯一记录(即原始表中只有一个重复的版本,通常使用select distinct
    • 并在您的应用程序中使用该新表;或删除旧表并将新表重命名为旧名称。

    这个原则的好处是您可以在删除旧表之前验证新表中的内容 - 总是很高兴检查这类事情^^

    【讨论】:

      猜你喜欢
      • 2011-07-18
      • 1970-01-01
      • 2023-04-02
      • 2017-10-11
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多