首页 >数据库 >mysql教程 >如何删除MySQL中的重复行并保留一行?

如何删除MySQL中的重复行并保留一行?

Barbara Streisand
Barbara Streisand原创
2025-01-23 13:26:10426浏览

How to Delete Duplicate Rows in MySQL While Keeping One?

如何从MySQL中删除重复行(保留一行)

在维护整洁高效的数据库时,删除重复数据至关重要。虽然使用SELECT DISTINCT之类的查询选择唯一值很简单,但通过DELETE操作删除重复项需要稍微不同的方法。

使用DELETE删除重复项

要从表中删除重复行,同时保留一个副本,您可以使用两种DELETE查询变体:

  1. 保留ID值最低的行:

    <code class="language-sql">DELETE n1 FROM names n1, names n2
    WHERE n1.id > n2.id AND n1.name = n2.name</code>
  2. 保留ID值最高的行:

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

请注意,这些查询使用内部联接(JOIN)根据name列比较行。然后,它们根据一行比另一行的ID值更高或更低的条件来识别和删除重复行。

注意事项:

  • 在执行这些查询之前,务必创建表的测试副本,因为如果使用不当,它们可能会删除所有行。
  • 查询中包含条件AND n1.id != n2.id可确保如果行具有相同的名称但不同的ID值,则不会删除这些行。

使用INSERT的替代方法:

对于较大的表,使用带DISTINCTINSERT是删除重复项的更有效方法。

<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