首页 >数据库 >mysql教程 >如何删除没有唯一 ID 的表中的重复行?

如何删除没有唯一 ID 的表中的重复行?

Barbara Streisand
Barbara Streisand原创
2025-01-23 01:47:09393浏览

How to Delete Duplicate Rows in a Table Without a Unique ID?

无需唯一 ID 删除重复行

如果表中没有唯一的行标识符,我们该如何删除重复行?假设我们有一个包含以下数据的表:

<code>| col1 | col2 | col3 | col4 | col5 | col6 | col7 |
|---|---|---|---|---|---|---|
| john | 1 | 1 | 1 | 1 | 1 | 1 |
| john | 1 | 1 | 1 | 1 | 1 | 1 |
| sally | 2 | 2 | 2 | 2 | 2 | 2 |
| sally | 2 | 2 | 2 | 2 | 2 | 2 |</code>

我们的目标是消除重复行,留下:

<code>| col1 | col2 | col3 | col4 | col5 | col6 | col7 |
|---|---|---|---|---|---|---|
| john | 1 | 1 | 1 | 1 | 1 | 1 |
| sally | 2 | 2 | 2 | 2 | 2 | 2 |</code>

一种可靠的方法,可以避免缺少唯一 ID 的问题,就是使用公用表表达式 (CTE) 和 ROW_NUMBER() 函数。这种组合允许我们识别哪些行应该被删除:

<code class="language-sql">WITH CTE AS (
   SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7],
       RN = ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1)
   FROM dbo.Table1
)
DELETE FROM CTE WHERE RN > 1</code>

让我们分解一下这个查询:

  • 名为“CTE”的 CTE 使用 ROW_NUMBER() 函数,根据“col1”列中的每个不同值计算行号,同时按该列进行分区。
  • DELETE 语句随后删除行号 (RN) 大于 1 的行,从而删除所有重复行。

注意:您在原始帖子中提供的结果可能有所不同,因为可能存在错别字。上面的输出代表期望的结果。

此技术的灵活性允许在 PARTITION BY 子句中包含多个列,从而能够根据多种条件组合检测重复项。

以上是如何删除没有唯一 ID 的表中的重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!

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