首页 >数据库 >mysql教程 >T-SQL中如何根据键列高效删除重复行?

T-SQL中如何根据键列高效删除重复行?

Barbara Streisand
Barbara Streisand原创
2025-01-15 16:10:43318浏览

How to Efficiently Delete Duplicate Rows in T-SQL Based on Key Columns?

基于主键列高效删除T-SQL中的重复行

问题:

由于数据创建过程中的错误,表中包含大量重复行。目标是在保留每个主键列唯一组合的一行的同时,消除多余的行。但是,表中包含一些与问题无关的列,这些列的数据略有不同,必须忽略。

解决方案:

对于SQL Server 2005及更高版本,可以使用OVER()函数和公用表表达式(CTE)来高效地删除重复行。

CTE和DELETE语句:

<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中文网其他相关文章!

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