usr*_*986 85 sql t-sql duplicates delete-row
考虑一个名为EmployeeName
table 的列Employee
.目标是根据EmployeeName
字段删除重复记录.
EmployeeName
------------
Anand
Anand
Anil
Dipak
Anil
Dipak
Dipak
Anil
Run Code Online (Sandbox Code Playgroud)
使用一个查询,我想删除重复的记录.
如何在SQL Server中使用TSQL?
Joh*_*ibb 206
您可以使用窗口功能执行此操作.它将通过empId命令dupes,并删除除第一个之外的所有.
delete x from (
select *, rn=row_number() over (partition by EmployeeName order by empId)
from Employee
) x
where rn > 1;
Run Code Online (Sandbox Code Playgroud)
将其作为选择运行以查看将删除的内容:
select *
from (
select *, rn=row_number() over (partition by EmployeeName order by empId)
from Employee
) x
where rn > 1;
Run Code Online (Sandbox Code Playgroud)
Stu*_*tLC 33
假设您的Employee表也有一个唯一列(ID
在下面的示例中),以下内容将起作用:
delete from Employee
where ID not in
(
select min(ID)
from Employee
group by EmployeeName
);
Run Code Online (Sandbox Code Playgroud)
这将使表中具有最低ID的版本保留.
编辑
Re McGyver的评论 - 截至SQL 2012
MIN
可以与numeric,char,varchar,uniqueidentifier或datetime列一起使用,但不能与位列一起使用
对于2008 R2及更早版本,
MIN可以与numeric,char,varchar或datetime列一起使用,但不能与位列一起使用(它也不能与GUID一起使用)
对于2008R2,您需要将其GUID
转换为支持的类型MIN
,例如
delete from GuidEmployees
where CAST(ID AS binary(16)) not in
(
select min(CAST(ID AS binary(16)))
from GuidEmployees
group by EmployeeName
);
Run Code Online (Sandbox Code Playgroud)
您可以尝试以下内容:
delete T1
from MyTable T1, MyTable T2
where T1.dupField = T2.dupField
and T1.uniqueField > T2.uniqueField
Run Code Online (Sandbox Code Playgroud)
(这假设您有一个基于整数的唯一字段)
虽然我个人说你最好试图纠正重复条目在发生之前被添加到数据库而不是作为post-it操作的事实.
归档时间: |
|
查看次数: |
83402 次 |
最近记录: |