首页 > 解决方案 > 如何删除 SQL Server 中完全相同的重复行

问题描述

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

Helow 是一个例子:

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

当我运行此查询时,我得到以下结果:

在此处输入图像描述

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

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

感谢您的帮助!

标签: sqlsql-servertsqlduplicatessql-delete

解决方案


您可以为此使用可更新的 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

推荐阅读