美文网首页oracle
Oracle数据库中重复数据删除方法:部分去重+完全去重

Oracle数据库中重复数据删除方法:部分去重+完全去重

作者: 雅式创始人 | 来源:发表于2017-03-19 11:40 被阅读0次

Oracle数据库重复的数据一般有两种去重方法,一、完全重复数据去重;二、部分字段数据重复去重。

一、完全重复数据去重方法

【当多表连接时一定要记住去除笛卡尔乘积】

对于表中完全重复数据去重,可以采用以下SQL语句。

Code

CREATETABLE"#temp"AS (SELECTDISTINCT * FROM 表名);--创建临时表,并把DISTINCT 去重后的数据插入到临时表中

truncateTABLE 表名;--清空原表数据

INSERTINTO 表名(SELECT * FROM"#temp");--将临时表数据插入到原表中

DROPTABLE"#temp";--删除临时表

具体思路是,首先创建一个临时表,然后将DISTINCT之后的表数据插入到这个临时表中;然后清空原表数据;再讲临时表中的数据插入到原表中;最后删除临时表。

二、部分数据去重方法

首先查找重复数据

select 字段1,字段2,count(*) from 表名 groupby 字段1,字段2 havingcount(*) > 1

将上面的>号改为=号就可以查询出没有重复的数据了。

想要删除这些重复的数据,可以使用下面语句进行删除:

deletefrom 表名 a where 字段1,字段2 in

(select 字段1,字段2,count(*) from 表名 groupby 字段1,字段2 havingcount(*) > 1)

上面的语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库卡死。

基于上述情况,可以先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:

CREATETABLE 临时表 AS

(select 字段1,字段2,count(*) from 表名 groupby 字段1,字段2 havingcount(*) > 1)

下面就可以进行这样的删除操作了:

deletefrom 表名 a where 字段1,字段2 in (select 字段1,字段2 from 临时表);

先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。

上面的语句会把所有重复的全都删除,在oracle中,有个隐藏了自动rowid,里面给每条记录一个唯一的rowid,我们如果想保留最新的一条记录,我们就可以利用这个字段,保留重复数据中rowid最大的一条记录就可以了。

下面是查询重复数据的一个例子:


select a.rowid,a.* from 表名 a

where a.rowid !=

(

selectmax(b.rowid) from 表名 b

where a.字段1 = b.字段1 and

a.字段2 = b.字段2

)


上面括号中的语句是查询出重复数据中rowid最大的一条记录。而外面就是查询出除了rowid最大之外的其他重复的数据了。

由此,我们要删除重复数据,只保留最新的一条数据,就可以这样写了:


deletefrom 表名 a

where a.rowid !=

(

selectmax(b.rowid) from 表名 b

where a.字段1 = b.字段1 and

a.字段2 = b.字段2

)


同理,上述代码的执行效率毕竟低,所以我们可以考虑建立临时表,将需要判断重复的字段、rowid插入临时表中,然后删除的时候在进行比较。


createtable 临时表 as

select a.字段1,a.字段2,MAX(a.ROWID) dataid from 正式表 a GROUPBY a.字段1,a.字段2;

deletefrom 表名 a

where a.rowid !=

(

select b.dataid from 临时表 b

where a.字段1 = b.字段1 and

a.字段2 = b.字段2

);

commit;


以上就是Oracle数据库中重复数据删除方法:部分去重+完全去重的全文介绍,希望对您学习和使用Oracle有所帮助.


【3控制要显示的数据列】SELECT[DISTINCT]*|列名称[别名],列名称[别名],列名称[别名]……

【1确定数据来源】FROM 表名称[别名]

【2确定满足条件的数据行】[WHERE 过滤条件]

【④数据排序】    ORDER BY 排序字段  ASC |DESC

相关文章

  • Oracle数据库中重复数据删除方法:部分去重+完全去重

    Oracle数据库重复的数据一般有两种去重方法,一、完全重复数据去重;二、部分字段数据重复去重。 一、完全重复数据...

  • AFNetworking.framework Command /

    尝试解决方法: clean项目,重跑,无效 DerivedData删除,重跑,无效 删除钥匙串重复证书,重跑,无效...

  • 数据分析Excel之去重

    excel中经常需要对数据去重操作。 选中需要去重的区域,在 「数据」菜单中单机「删除重复项」即可。 默认是所有列...

  • 常用sql语句

    删除重复数据 更新操作数组数据 插入去重更新

  • 如何使用drop_duplicates进行简单去重

    一本正经胡说八道的猫 什么是去重呢?简单来说,数据去重指的是删除重复数据。在一个数字文件集合中,找出重复的数据并将...

  • 3. js数组去重方法

    数组去重 删除数组中的重复项; 方法一:注意indexOf的兼容 方法二:修改原数组 方法二优化:

  • MongDB中删除重复数据

    MongDB中删除重复数据 目的:数据库中存储几万甚至几十万条数据,而mongdb数据库中存在完全重复的多条数据,...

  • 18,java HashSet 去重复的4种方法

    LinkedHashSet去重去重后保持原有顺序(重复数据只保留一条) HashSet去重方法一去重后顺序打乱(重...

  • 数组对象去重

    主要分享两个去重方法,已经满足大部分去重需求,直接贴图,

  • DM7表中有重复数据处理办法

    问题描述:如何删除数据库中的重复数据问题原因:某些时候,数据库中需要添加新的唯一性约束,但是数据库中已经存在了重复...

网友评论

    本文标题:Oracle数据库中重复数据删除方法:部分去重+完全去重

    本文链接:https://www.haomeiwen.com/subject/rvsmnttx.html