首页 >数据库 >mysql教程 >如何在保留一条记录的同时高效删除MySQL中的重复行?

如何在保留一条记录的同时高效删除MySQL中的重复行?

Barbara Streisand
Barbara Streisand原创
2025-01-23 13:21:10583浏览

How to Efficiently Delete Duplicate Rows in MySQL While Keeping One Record?

MySQL中删除重复行(重复数据)

问题:

如何从MySQL表中删除重复行,同时保留每个唯一值的单条记录?

示例:

考虑names表中的以下数据:

id name
1 google
2 yahoo
3 msn
4 google
5 google
6 yahoo

解决方案:

警告:务必采取预防措施,首先在表的测试副本上执行此操作。

要删除所有重复行(保留一个),并保留具有最低或最高id值的记录,请使用以下查询:

保留最低id值:

<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name</code>

保留最高id值:

<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name</code>

附加说明:

  • 确保在两个查询中都添加条件AND n1.id != n2.id,以防止意外删除所有行。
  • 此方法计算成本很高,如果表很大,可能会中断您的连接。
  • 对于大型表,请考虑使用带有DISTINCT的INSERT作为更快的替代方法:
<code class="language-sql">INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
    SELECT DISTINCT cellId,attributeId,entityRowId,value
    FROM tableName;</code>

以上是如何在保留一条记录的同时高效删除MySQL中的重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn