加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 服务器 > 系统 > 正文

sql语句如何去重复记录?传授你两个办法

发布时间:2022-04-26 08:47:18 所属栏目:系统 来源:互联网
导读:sql语句如何去重复记录?我们在存储数据的时候,会存在一些重复字段,那么我们如何高效去除重复记录呢?下面给大家分享两种实现方法,感兴趣的朋友可以参考参考。 如果要删除手机(mobilePhone),电话(officePhone),邮件(email)同时都相同的数据,以前一直使
       sql语句如何去重复记录?我们在存储数据的时候,会存在一些重复字段,那么我们如何高效去除重复记录呢?下面给大家分享两种实现方法,感兴趣的朋友可以参考参考。
 
       如果要删除手机(mobilePhone),电话(officePhone),邮件(email)同时都相同的数据,以前一直使用这条语句进行去重:
 
delete from 表 where id not in
(select max(id) from 表 group by mobilePhone,officePhone,email )
or
delete from 表 where id not in
 (select min(id) from 表 group by mobilePhone,officePhone,email )
       其中下面这条会稍快些。上面这条数据对于100万以内的数据效率还可以,重复数1/5的情况下几分钟到几十分钟不等,但是如果数据量达到300万以上,效率骤降,如果重复数据再多点的话,常常会几十小时跑不完,有时候会锁表跑一夜都跑不完。无奈只得重新寻找新的可行方法,今天终于有所收获:
 
//查询出唯一数据的ID,并把他们导入临时表tmp中
select min(id) as mid into tmp from 表 group by mobilePhone,officePhone,email
 //查询出去重后的数据并插入finally表中
insert into finally select (除ID以外的字段) from customers_1 where id in (select mid from tmp)
 
       按照某几个字段名称查找表中存在这几个字段的重复数据并按照插入的时间先后进行删除,条件取决于order by 和row_num。
 
       方法一按照多条件重复处理:
 
delete tmp from(  
select row_num = row_number() over(partition by 字段,字段 order by 时间 desc)  
 from 表 where 时间> getdate()-1  
 
       方法二按照单一条件进行去重:
 
delete from 表 where 主键ID not in(  
select max(主键ID) from 表 group by 需要去重的字段 having count(需要去重的字段)>=1  
 
       注意:为提高效率如上两个方法都可以使用临时表, not in 中的表可以先提取临时表#tmp,
 
       然后采用not exists来执行,为避免数量过大,可批量用Top控制删除量
 
delete top(2) from 表  
   where not exists (select 主键ID  
 from #tmp where #tmp.主键ID=表.主键ID)
       总结
       以上就是关于sql语句如何去重复记录的方法介绍,具有一定的参考借鉴价值,需要的朋友可以看看,想要了解更多sql语句去重复记录的技巧,大家可以继续关注其他相关文章。

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读