Oracle刪除重複資料的3個方法

2021-04-25 18:54:22 字數 906 閱讀 3024

找到了三個刪除重複資料的方法,我只會第一種。

下邊就把三種方法都列出來

我自己建了乙個簡單的表test

id  sql

1  100  200802

2  100  200802

3  100  200802

4  100  200802

5  100  200802

第一種:

delete from test a where a.rowid <>

(select max(rowid) from test b where a.id=b.id and a.sql=b.sql

);第二種:

delete from test where rowid in

(select rid from

(select rowid rid,row_number() over(partition by id,sql order by rowid) rn from test

)where rn <>1

);第三種:

create table test2 as

(select id,sql from

(select id,sql,row_number() over(partition by id,sql order by rowid) rn from test t

)where rn=1

);truncate table test;

insert into test2 values(select * from test2);

drop table test2;

據說第二種方法的效率非常高。對於大資料量來說,第一種方法如果需要n個小時,那麼方法二只需要半分鐘。

第三種方法的第一步效率等同於方法二,不過對於後面的insert操作我持懷疑態度。

Oracle刪除重複資料

在oracle中,有個隱藏了自動rowid,裡面給每條記錄乙個唯一的rowid,我們如果想保留最新的一條記錄,我們就可以利用這個字段,保留重複資料中rowid最大的一條記錄就可以了。下面是查詢重複資料的乙個例子 select a.rowid,a.from 表名 a where a.rowid sel...

ORACLE刪除重複資料

我們可能會出現這種情況,某個表原來設計不周全,導致表裡面的資料資料重複,那麼,如何對重複的資料進行刪除呢?重複的資料可能有這樣兩種情況,第一種時表中只有某些字段一樣,第二種是兩行記錄完全一樣。一 對於部分字段重複資料的刪除 先來談談如何查詢重複的資料吧。下面語句可以查詢出那些資料是重複的 selec...

oracle 複製資料 刪除重複資料

最簡單的複製 insert into a kcdm,zklb,kksj i select kcdm,zklb,kksj i from b 產生疑惑的地方 如果a有乙個自增的id,語句該怎麼寫?開始想法 insert into a id,kcdm,zklb,kksj i select seq a id...