您当前的位置: 首页 > 数据库教程 > Oracle教程 > Oracle数据库中去除重复数据

Oracle数据库中去除重复数据

作者:不详 来源:网络 发布时间: 2014-09-08 21:48 点击:
在平时的开发中,我们经常遇到数据表中出现重复的数据,那么该如何解决呢?这里介绍两种情况下的数据去重方法,一、完全重复数据去重;二、部分字段数据重复去重。 一、完全重复数据去重方法 对于表中完全重复数据去重,可以采用以下SQL语句。 Code CREATETABLE#tempAS (

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数据库中去除重复数据"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4