对数据表操作之前,首先把源数据表备份一下,这一点其实比较重要的,尤其是我们需要对表进行删除操作时尤为重要,以防误操作甚至是数据丢失。以下代码将数据库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出现了重复,所以并没有完全删身份证号码重复的记录。