如何删除在SQL Server中完全相同的重复行[duplicate]

问题描述 投票:0回答:2

出于测试目的,我从.CSV文件中将一些数据加载到SQL Server表中,该表中没有任何主键,唯一键或自动生成的ID。

Helow是这种情况的示例:

select * 
from people
where name in (select name 
               from people
               group by name
               having count(name) > 1)

当我运行此查询时,我得到这些结果:

enter image description here

目标是保留一行并删除其他重复的行。

除了将内容保存在其他地方,删除所有重复的行并插入新行之外,还有其他方法吗?

感谢您的帮助!

sql sql-server tsql duplicates sql-delete
2个回答
1
投票

您可以为此使用可更新的CTE。

如果要删除与三列完全相同的行(如示例数据中所示,并在问题中进行了解释:]

with cte as (
    select row_number() over(partition by name, age, gender order by (select null)) rn
    from people
)
delete from cte where rn > 1

如果仅想删除name上的重复项(如现有查询中所示:

with cte as (
    select row_number() over(partition by name order by (select null)) rn
    from people
)
delete from cte where rn > 1

1
投票

您如何定义“重复项”?根据您的代码示例,它似乎是按name

对于删除,您可以在row_number()中使用可更新的CTE:

with todelete as (
      select p.*,
             row_number() over (partition by name order by (select null)) as seqnum
      from people p
     )
delete from todelete
    where seqnum > 1;

[如果有更多列定义重复项,则调整partition by子句。

© www.soinside.com 2019 - 2024. All rights reserved.