无需唯一 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() 函数。这种组合允许我们识别哪些行应该被删除:
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
让我们分解一下这个查询:
注意:您在原始帖子中提供的结果可能有所不同,因为可能存在错别字。上面的输出代表期望的结果。
此技术的灵活性允许在 PARTITION BY 子句中包含多个列,从而能够根据多种条件组合检测重复项。
以上是如何删除没有唯一 ID 的表中的重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!