如何删除 SQL 服务器中完全相同的重复行

How to delete duplicate rows that are exactly the same in SQL Server

我出于测试目的从 .CSV 文件将一些数据加载到 SQL 服务器 table,我没有任何主键、唯一键或自动生成的 ID在那 table.

下面是这种情况的一个例子:

select * 
from people
where name in (select name 
               from people
               group by name
               having count(name) > 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

您如何定义 "duplicate"?根据您的代码示例,它似乎是由 name.

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

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 子句。