如何从SQL表中删除重复数据

时间:2011-09-22 11:35:00

标签: sql sql-server sql-server-2005 tsql sql-server-2008

我正在从第三方来源的数据上传和更新我的数据库。不幸的是,来自第三方数据源的数据中有许多重复记录。

我在这里看了几个关于SO的问题但是所有这些问题似乎都是有一个ID列,它将一行与另一行区分开来。

就我而言,没有ID列。例如

State   City    SubDiv  Pincode Locality Lat    Long
Orissa  Koraput Jeypore 764001  B.D.Pur 18.7743 82.5693
Orissa  Koraput Jeypore 764001  Jeypore 18.7743 82.5693
Orissa  Koraput Jeypore 764001  Jeypore 18.7743 82.5693
Orissa  Koraput Jeypore 764001  Jeypore 18.7743 82.5693
Orissa  Koraput Jeypore 764001  Jeypore 18.7743 82.5693

是否有一个简单的查询,我可以运行删除所有重复记录并保留一条记录作为原始记录?所以在上面的例子中我想从表中删除3,4,5行。

我不确定是否可以使用简单的sql语句来完成,但是想知道别人的意见如何做到这一点

5 个答案:

答案 0 :(得分:7)

;with cte as(
select State City, SubDiv, Pincode, Locality, Lat, Long, 
row_number() over (partition by City, SubDiv, Pincode, Locality, Lat,Long order by City) rn
from yourtable
)
delete cte where rn > 1

答案 1 :(得分:5)

我会将第三方数据插入到临时表中,然后:

insert into
  target_table
select distinct
  *
from
  temporary_table

最后删除临时表。

只有不同(唯一)的行才会插入目标表。

答案 2 :(得分:3)

其中一个

  • 添加一列以重复删除并保留
  • 执行SELECT DISTINCT * INTO ANewTable FROM OldTable然后重命名等
  • 使用t-clausen.dk的CTE方法

然后在所需列

上添加唯一索引

答案 3 :(得分:2)

您可以使用ROW_NUMBER()函数:SQL SERVER – 2005 – 2008 – Delete Duplicate Rows

答案 4 :(得分:0)

试试这个

alter table mytable add id int identity(1,1)

delete  mytable  where id in (
select duplicateid from (select ROW_NUMBER() over (partition by State ,City ,SubDiv ,Pincode ,Locality ,Lat ,Long order by State ,City ,SubDiv ,Pincode ,Locality ,Lat ,Long ) duplicateid
from mytable) t where duplicateid !=1)

alter table mytable drop column id