删除SQL Server中的重复记录

删除SQL Server中的重复记录,sql,sql-server,Sql,Sql Server,我正在使用以下代码删除具有重复人员ID的记录。我可能只是忽略了什么 DELETE p1 FROM AR_Personnel p1 INNER JOIN AR_Personnel p2 WHERE p1.personnel_ID = p2.personnel_ID; 您可以尝试这样的方法—速度非常快(假设列i1是DUP): 这使用CTE,可能是当前最流行的删除DUP的模式。另一个选项是使用group by收集所有DUP select * -- delete -- ALWAYS test fi

我正在使用以下代码删除具有重复人员ID的记录。我可能只是忽略了什么

DELETE p1 
FROM AR_Personnel p1
INNER JOIN AR_Personnel p2 
WHERE p1.personnel_ID = p2.personnel_ID;

您可以尝试这样的方法—速度非常快(假设列i1是DUP):


这使用CTE,可能是当前最流行的删除DUP的模式。

另一个选项是使用group by收集所有DUP

select *
-- delete -- ALWAYS test first !!
from   AR_Personnel
where AR_Personnel.PrimaryKeyField not in 
  ( select min(p.PrimaryKeyField)
    from   AR_Personnel p
    group by p.personnel_ID
  ) 

但使用CTE可能更快

获取复制ID的前1个,并将它们插入temp表格变量。然后删除所有重复项并将临时表条目插入主表。您的代码删除了“我的测试”中的所有值。应首先使用一个小数据集测试任何删除代码,并将删除替换为“选择”。
select *
-- delete -- ALWAYS test first !!
from   AR_Personnel
where AR_Personnel.PrimaryKeyField not in 
  ( select min(p.PrimaryKeyField)
    from   AR_Personnel p
    group by p.personnel_ID
  )