zoukankan      html  css  js  c++  java
  • ORACLE重复记录处理

    ORACLE重复记录处理已经在网上有一些简单SQL可供使用,但感觉还有改进之处。

    delete table1 where rowid not in (
      select max(rowid) from table1 group by col1 ,col2  )

    上述方法可以删除重复的信息,保留的是相同字段中ROWID最大的那一条记录。

    但这种方法需要改进才能查询没有重复的号码,读者可能会想,我使用distinct可以去重,可这样之后,你还需要通过去重记录。

    本文对重复记录进行一些SQL进行简单的介绍,仅限ORACLE。

    查询重复记录信息:

    select * from yourtable where key in (

        select key from yourtable group by key having count(key) >1) 

    order by key

    查询去掉重复记录的结果集:

    select *
      from (select t.*, row_number() over(partition by key order by field1) rnk
              from yourtable t
             order by key) ot
     where rnk = 1

    这里较灵活的是可以通过对组内信息排名,以取应该保留的记录。上例通过对key分组,并按field1字段进行排序,以灵活选择有用的信息。

    有了查询,将重复记录导入到另外一个表就容易了:

    create table another_table as

    select .....

    回到正题:如果删除重复的记录呢?

    把查询结果的关键字作为删除条件就可以了:

    delete table yourtable where key in (

      select key
        from (select key, row_number() over(partition by key order by field1) rnk
              from yourtable t
             order by key) ot
       where rnk > 1)

    看上去比别人给的方案复杂多了,如此只是增加了灵活的选择重复记录。

    在此也只是提供了另外一种思路,请多多提意见批评指正。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    centos7 安装jdk及mysql8
    centos7 挂载数据盘
    windows server r2 之如何设置共享文件夹访问不需要输入用户名和密码
    svn 常见问题记录
    设计模式之代理模式
    ASP.Net在64位环境开发部署常见问题
    oracle 之创建用户,表空间,授权,修改用户密码
    oracle 常用语句
    IIS服务器 远程发布(Web Deploy)配置 VS2010 开发环境 Windows Server 2008服务器系统
    vs2012使用64位IIS EXPRESS调试
  • 原文地址:https://www.cnblogs.com/yin138/p/4902262.html
Copyright © 2011-2022 走看看