现在的位置: 首页 > 综合 > 正文

ORACLE重复记录处理

2013年10月11日 ⁄ 综合 ⁄ 共 871字 ⁄ 字号 评论关闭

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)

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

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

抱歉!评论已关闭.