Oracle 去重复的数据

场景:

     在实际工作中,我们在进行数据插入,或者数据分析时在已经存在的表数据中往往发现会出现有数据重复的现象。

    重复的数据分两种:

   (1)表中部分字段的重复,(2)完全重复的记录。

 

1. 部分字段的重复:

(1)数据量小情况下,直接用SQL语句删除部分字段重复数据:

      1)查询重复的数据SQL:

     select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1

      2)删除上面查询出的重复的数据并保留一条:

         delete from 表名 a where rowid != (select max(rowid) from 表名 group by 字段1,字段2 having count(*) > 1)

 

(2)以上即是删除查询到的数据,这种删除执行效率低下,数据量大时,不适合,可以用临时表方式,

         先将查询到的重复的数据插入到一张临时表,然后对其进行删除,这样,在执行删除的时候就不用再进行一次查询了。

       1)建立临时表,并将查询到的数据插入其中

     CREATE TABLE 临时表 AS

    (select 字段1,字段2,max(rowid) mrowid from 表名 group by 字段1,字段2 having count(*) > 1)

       2)再进行删除操作:

        delete from 表名 a where rowid!= (select mrowid from 临时表 b where b.字段1=a.字段1 and b.字段2=a.字段2);

 

2. 完全重复记录的删除:

select distinct * from 表名

将查询的记录放进临时表,然后再将原来的表记录删除,最后将临时表的数据导回原来的表中。

CREATE TABLE 临时表 AS (select distinct * from 表名);

truncate table 正式表;

insert into 正式表 (select * from 临时表);

drop table 临时表;

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值