删除SQL Server中的重复记录?

考虑一个名为EmployeeNametable 的列Employee。目标是根据EmployeeName字段删除重复记录。


EmployeeName

------------

Anand

Anand

Anil

Dipak

Anil

Dipak

Dipak

Anil

使用一个查询,我想删除重复的记录。


如何在SQL Server中使用TSQL?


函数式编程
浏览 537回答 3
3回答

慕标5832272

您可以使用窗口功能执行此操作。它将通过empId命令dupes,并删除除第一个之外的所有。delete x from (  select *, rn=row_number() over (partition by EmployeeName order by empId)  from Employee ) xwhere rn > 1;将其作为选择运行以查看将删除的内容:select *from (  select *, rn=row_number() over (partition by EmployeeName order by empId)  from Employee ) xwhere rn > 1;

叮当猫咪

假设您的Employee表也有一个唯一列(ID在下面的示例中),以下内容将起作用:delete from Employee where ID not in(    select min(ID)    from Employee     group by EmployeeName );这将使表中具有最低ID的版本保留。编辑Re McGyver的评论 - 截至SQL 2012MIN 可以与numeric,char,varchar,uniqueidentifier或datetime列一起使用,但不能与位列一起使用对于2008 R2及更早版本,MIN可以与numeric,char,varchar或datetime列一起使用,但不能与位列一起使用(它也不能与GUID一起使用)对于2008R2,您需要将其GUID转换为支持的类型MIN,例如delete from GuidEmployeeswhere CAST(ID AS binary(16)) not in(    select min(CAST(ID AS binary(16)))    from GuidEmployees    group by EmployeeName );

繁星淼淼

您可以尝试以下内容:delete T1from MyTable T1, MyTable T2where T1.dupField = T2.dupFieldand T1.uniqueField > T2.uniqueField  (这假设您有一个基于整数的唯一字段)虽然我个人说你最好试图纠正重复条目在发生之前被添加到数据库而不是作为post-it操作的事实。
打开App,查看更多内容
随时随地看视频慕课网APP