基于主键列高效删除T-SQL中的重复行
问题:
由于数据创建过程中的错误,表中包含大量重复行。目标是在保留每个主键列唯一组合的一行的同时,消除多余的行。但是,表中包含一些与问题无关的列,这些列的数据略有不同,必须忽略。
解决方案:
对于SQL Server 2005及更高版本,可以使用OVER()函数和公用表表达式(CTE)来高效地删除重复行。
CTE和DELETE语句:
1 2 3 4 5 6 | <code class = "language-sql" >WITH cte AS (
SELECT [foo], [bar],
row_number() OVER(PARTITION BY foo, bar ORDER BY baz) AS [rn]
FROM TABLE
)
DELETE cte WHERE [rn] > 1</code>
|
登录后复制
说明:
- CTE根据foo和bar列创建排序的行子集。
- ORDER BY baz子句是可选的,允许在每个分区(主键列组)内进行排序。
- DELETE语句删除CTE中排名大于1的所有行,有效地消除了重复项,同时保留每个主键列组合的一行。
以上是T-SQL中如何根据键列高效删除重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!