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)

浙公网安备 33010602011771号