• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Oracle数据库中去除重复数据

mysql 搞代码 4年前 (2022-01-09) 24次浏览 已收录 0个评论

在平时的开发中,我们经常遇到数据表中出现重复的数据,那么该如何解决呢?这里介绍两种情况下的数据去重方法,一、完全重复数据去重;二、部分字段数据重复去重。 一、完全重复数据去重方法 对于表中完全重复数据去重,可以采用以下SQL语句。 Code CREATETABL

  在平时的开发中,我们经常遇到数据表中出现重复的数据,那么该如何解决呢?这里介绍两种情况下的数据去重方法,一、完全重复数据去重;二、部分字段数据重复去重。

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

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

  Code

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

  truncateTABLE 表名;–清空原表数据

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

  DROPTABLE”#temp”;–删除临时表

  具体思路是,首先创建一个临时表,然本文来源gao@daima#com搞(%代@#码@网2后将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;


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Oracle数据库中去除重复数据

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址