ORACLE重複記錄處理

來源:互聯網
上載者:User

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)

看上去比別人給的方案複雜多了,如此只是增加了靈活的選擇重複記錄。

在此也只是提供了另外一種思路,請多多提意見批評指正。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.