重复记录的删除

时间:2023-02-01 06:25:27

     对数据表操作之前,首先把源数据表备份一下,这一点其实比较重要的,尤其是我们需要对表进行删除操作时尤为重要,以防误操作甚至是数据丢失。以下代码将数据库twt001中的数据表shiyan003备份到xy数据库中。

use xy

select * into shiyan003 from twt001.dbo.shiyan003

以下是表格shiyan003的记录

重复记录的删除

(一)删除完全相同记录

select distinct * into #Tmp from shiyan003

drop table shiyan003

select * into shiyan003 from #Tmp

drop table #Tmp

重复记录的删除

再来查看一下结果,下面这条记录已经删除了,它在表中完全出现一共两次

重复记录的删除

 

以下是查看结果

重复记录的删除

 

(二)删除不完全相同记录,我们的记录以单个字段(sfzhm)来作唯一标识,我们以下的命令都是通过外加一个字段grbh(个人编号)来处理,数据类型为nvarchar.

 

1、删除重复,只留有grbh最大的记录

delete from shiyan003

where grbh not in(select max(grbh) from shiyan003 group by sfzhm)

重复记录的删除

 

我们可以看出sfzhm重复的前3条记录已经删了,当然通加外置字段有点麻烦,最重要的一点是必须保证外置的字段是不重复的,请看以下例子

 

2、删除重复,只留有grbh最小的记录

在查询分析器中执行以下命令

delete from shiyan003

where sfzhm  in (select sfzhm  from shiyan003  group  by  sfzhm   having  count(sfzhm) > 1)

and grbh not in (select min(grbh) from  shiyan003  group by sfzhm  having count(sfzhm)>1)

重复记录的删除

查看删除以后的记录如下

重复记录的删除

 

可以看出删了以下两条记录

重复记录的删除

 

由于外置字段grbh出现了重复,所以并没有完全删身份证号码重复的记录。