SQL删除表中的重复数据

删除一张表中的重复数据需要进行一下的几个操作步骤:

1.首选需要选择两个唯一标识的列,如果没有就得另外找别的方法,这里的两个字段分别是主键rowguid和身份证号cardNumber。

2.使用cardNumber筛选出所有的具有重复数据的列中的cardNumber字段,并根据cardNumber进行分组。

select CardNumber from lkg_source_population group by CardNumber having count(*) > 1

3.选择通过cardNumber进行分组之后的重复数据中最小的rowguid字段。

select min(rowguid) rowguid from lkg_source_population group by CardNumber having count(*) > 1

4.然后删除表中cardNumber在第二步筛选出来的cardNumber集合中,但是rowguid不在第三步的rowguid集合中的数据,即每组保留一条数据。

5.由于在sql中不能先select出同一表中的某些值,再update这个表(在同一语句中),所以需要把结果集作为一个中间表再查询一次,根据中间表的查询结果进行删除操作,整理之后的sql语句如下所示:

delete from lkg_source_population where 
CardNumber in
    (select a.CardNumber from
         (select CardNumber from lkg_source_population group by CardNumber having count(*) > 1) as a)
and 
rowguid not in 
    (select b.rowguid from 
         (select min(rowguid) rowguid from lkg_source_population group by CardNumber having count(*) > 1) as b)

 

posted @ 2020-12-22 22:39  不皮的皮卡丘  阅读(943)  评论(0)    收藏  举报