从表中删除具有相同 ID 的重复行

Ank*_*pta 4 sql sql-server sql-server-2008

我有一个表 Emp 其中有这样的记录

Id     Name
1      A
2      B
3      C
1      A
1      A
2      B
3      C
Run Code Online (Sandbox Code Playgroud)

现在我想从表中删除重复行我正在使用此查询来选择或计算重复记录的数量

SELECT NameCol, COUNT(*) as TotalCount FROM TestTable 
GROUP BY NameCol HAVING COUNT(*) > 1 
ORDER BY COUNT(*) DESC
Run Code Online (Sandbox Code Playgroud)

我应该编写什么查询来删除表中的重复行。

如果我编写此查询来删除重复记录,那么它会给出结果(0) row Affected

`DELETE FROM TestTable 
    WHERE ID NOT IN ( SELECT MAX(ID) FROM 
                                     TestTable 
                                     GROUP BY NameCol
                    )`
Run Code Online (Sandbox Code Playgroud)

t-c*_*.dk 6

对于 sqlserver 2005+

测试数据:

declare @t table(Id int, Name char(1))
insert @t values
(1,'A'),(2,'B'),(3,'C'),(1,'A'),(1,'A'),(2,'B'),(3,'C')
Run Code Online (Sandbox Code Playgroud)

删除语句(将@t替换为您的Emp表)

;with a as
(
select row_number() over (partition by id, name order by id) rn
from @t
)
delete from a where rn > 1

select * from @t
Run Code Online (Sandbox Code Playgroud)