Sql 删除重复行
我有一张像这样的桌子 表1 身份证,姓名Sql 删除重复行,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一张像这样的桌子 表1 身份证,姓名 如何编写一个查询,删除所有具有重复名称的行,但保留Id较低的行?如果您使用的是SQL Server 2005或更高版本: With Dups As ( Select Id, Name , Row_Number() Over ( Partition By Name Order By Id ) As Num From Table1 ) Delete Table1 Where Id In (
如何编写一个查询,删除所有具有重复名称的行,但保留Id较低的行?如果您使用的是SQL Server 2005或更高版本:
With Dups As
(
Select Id, Name
, Row_Number() Over ( Partition By Name Order By Id ) As Num
From Table1
)
Delete Table1
Where Id In (
Select Id
From Dups
Where Num > 1
)
如果使用SQL Server 2000及更早版本
Delete Table1
Where Exists (
Select 1
From Table1 As T1
Where T1.Name = Table1.Name
Having Min( T1.Id ) <> Table1.Id
)
只需使用游标即可完成此操作 查询可能是这样的 声明@id int 声明@name nvarchar30 为select id声明cr游标,名称来自idnametbl order by id 更新 开放式cr 将下一个从cr获取到@id,@name 而@@fetch\u status=0 开始 从idnametbl中删除,其中id>@id和name=@name 将下一个从cr获取到@id,@name 结束 闭合cr
解除分配cr可以通过简单的自连接查询删除重复项。下面的脚本将为您完成此任务
delete t2
from Table1 t1
join Table1 t2
on t1.Name = t2.Name
where t1.Id < t2.Id
此逻辑可用于需要删除重复项的情况。我们应该尽可能避免光标阻塞表格。创建一个具有唯一行的新表格删除旧表格,然后用旧名称重命名新表格,也许您应该尝试避免添加重复的条目在完成清理后,在名称上添加一个唯一的约束,这样您就不必再次执行此操作。可能重复的