找到了三個刪除重複資料的方法,我只會第一種。
下邊就把三種方法都列出來
我自己建了乙個簡單的表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...