数据库中删除重复数据

数据重复,主要分为两种:

一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如身份证号字段重复,而其他字段不一定重复或都重复可以忽略,毕竟我们只要保证身份证号在表中数据唯一。

解决方法:

(1)完全重复的记录

得到无重复的记录

select distinct * from tableName

删除重复的记录(重复记录保留1条),可以按以下方法删除

select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp

(2)部分重复的记录

发生这种重复的原因是表设计不周产生的,可以通过增加唯一索引列解决。

这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下:(假设有重复的字段为身份证号,要求得到这身份证号唯一的结果集)

-- 增加索引
select identity(int,1,1) as autoID, * into #Tmp from tableName
-- 取出不重复的索引
select min(autoID) as autoID into #Tmp2 from #Tmp group by 身份证号
-- 根据不重复的索引取出不重复的数据
select * from #Tmp where autoID in(select autoID from #tmp2)

最后一个select即得到了身份证号不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

通常,我们可能不仅仅是为了这次数据获取,可能主要的还是对这张表重复数据做清洗,删除重复数据,可以加上下面语句,做一次delete:

-- 从第一张表中删除重复数据
delete from #Tmp where autoID not in(select autoID from #tmp2)

 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:像素格子 设计师:CSDN官方博客 返回首页

打赏作者

第一段代码

编码不易,如合卿意,多多鼓励

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值