我的编程空间,编程开发者的网络收藏夹
学习永远不晚

利用SQL语句怎么删除重复的记录

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

利用SQL语句怎么删除重复的记录

利用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 ) 

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) 

//查询出唯一数据的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)

效率对比:用delete方法对500万数据去重(1/2重复)约4小时。4小时,很长的时间。

用临时表插入对500万数据去重(1/2重复)不到10分钟。

其实用删除方式是比较慢的,可能是边找边删除的原因吧,而使用临时表,可以将没有重复的数据ID选出来放在临时表里,再将表的信息按临时表的选择出来的ID,将它们找出来插入到新的表,然后将原表删除,这样就可以快速去重啦。

SQL语句去掉重复记录,获取重复记录

按照某几个字段名称查找表中存在这几个字段的重复数据并按照插入的时间先后进行删除,条件取决于order by 和row_num。

方法一按照多条件重复处理:

delete tmp from(  
select row_num = row_number() over(partition by 字段,字段 order by 时间 desc)  
 from 表 where 时间> getdate()-1  
 ) tmp  
 where row_num > 1 
delete tmp from( 
select row_num = row_number() over(partition by 字段,字段 order by 时间 desc) 
 from 表 where 时间> getdate()-1 
 ) tmp 
 where row_num > 1

方法二按照单一条件进行去重:

delete from 表 where 主键ID not in(  
select max(主键ID) from 表 group by 需要去重的字段 having count(需要去重的字段)>=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)

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

利用SQL语句怎么删除重复的记录

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么用SQL语句删除表中的记录

要用SQL语句删除表中的记录,可以使用DELETE FROM语句。语法如下:```DELETE FROM 表名 WHERE 条件;```其中,表名是要删除记录的表的名称,条件是一个可选项,用于指定删除的条件。以下是一些示例:1. 删除表中所
2023-09-16

MySQL中通过SQL语句删除重复记录并且只保留一条记录

目录一、单个字段的操作1、 查询全部重复的数据2、删除全部重复试题3、查询表中多余重复试题(根据depno来判断,除了rowid最小的一个)4、删除表中多余重复试题并且只留1条二、多个字段的操作总结最近在做题库系统,由于在题库中添加了重复的
2023-01-04

sql去重删除语句怎么写

sql 中的去重删除语句可从表中删除重复行,保留唯一值。步骤:确定要删除重复行的列;在 delete 语句中使用 distinct 关键字;指定要删除的列;指定要删除行的表。如何编写 SQL 去重删除语句SQL 中的去重删除语句用于从表中
sql去重删除语句怎么写
2024-05-30

记录sql server 的批量删除主外键的sql语句

select b.name TableName,a.name TypeName,a.* from sysobjects a inner join sysobjects b on a.parent_obj=b.id and b.xtype=‘U‘--删除约束
记录sql server 的批量删除主外键的sql语句
2021-06-20

oracle怎么删除重复数据语句

在Oracle中,可以使用DELETE语句来删除重复数据。以下是一个示例:```sqlDELETE FROM your_tableWHERE rowid NOT IN (SELECT MIN(rowid)FROM your_tableGRO
2023-08-11

sql的删除语句怎么写

sql 的删除语句是 delete from,用于从指定表中删除行。语法为:delete from table_name where condition。condition 是一个可选条件,用于指定要删除的行。如果不指定条件,则删除所有行。
sql的删除语句怎么写
2024-06-03

怎么用sql delete语句删除行

今天小编给大家分享一下怎么用sql delete语句删除行的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、概念delete
2023-06-30

如何利用sql语句复制一条或多条记录

这篇文章主要介绍了如何利用sql语句复制一条或多条记录,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。insert into article (id,class,title,c
2023-06-08

oracle怎么删除序列的sql语句

要删除Oracle中的序列,可以使用以下SQL语句:```sqlDROP SEQUENCE sequence_name;```其中,sequence_name是要删除的序列的名称。请注意,删除序列将完全删除序列及其定义,无法恢复。在删除之前
2023-08-25

MySQL删除重复记录的方法是什么

删除MySQL表中重复记录的方法有两种:使用DISTINCT关键字和临时表:可以先创建一个临时表,将表中的数据按照去重条件插入到临时表中,然后再将原表清空,并将临时表中的数据插入到原表中。具体步骤如下:CREATE TABLE temp_t
MySQL删除重复记录的方法是什么
2024-05-21

编程热搜

目录