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

sha*_*shi 0 sql t-sql sql-server sql-server-2005 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
Run Code Online (Sandbox Code Playgroud)

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

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

t-c*_*.dk 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
Run Code Online (Sandbox Code Playgroud)


Sta*_*rds 5

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

insert into
  target_table
select distinct
  *
from
  temporary_table
Run Code Online (Sandbox Code Playgroud)

最后删除临时表.

仅将不同(唯一)行插入目标表.