ROWID的使用 快速刪除表中重複的記錄

2021-06-14 16:21:05 字數 896 閱讀 2008

⑴ 通過建立臨時表 

可以把資料先匯入到乙個臨時表中,然後刪除原表的資料,再把資料導回原表,sql語句如下: 

sql>create table stu_tmp as select distinct* from stu; sql>truncate table sut;        

//清空表記錄 

sql>insert into stu select * from stu_tmp;    //將臨時表中的資料新增回原表  

這種方法可以實現需求,但是很明顯,對於乙個千萬級記錄的表,這種方法很慢,在生產系統中,這會給系統帶來很大的開銷,不可行。  

⑵ 利用rowid結合max或min函式 

使用rowid快速唯一確定重複行結合max或min函式來實現刪除重複行。 

sql>delete from stu a where rowid not in (select max(b.rowid) from stu b where a.no=b.no and a.name = b.name and a.*** = b.***);      //這裡max使用min也可以 或者用下面的語句 

sql>delete from stu a where rowid < (select max(b.rowid) from stu b where a.no=b.no and a.name = b.name and a.*** = b.***); //這裡如果把max換成min的話,前面的where子句中需要把"<"改為">" 

跟上面的方法思路基本是一樣的,不過使用了group by,減少了顯性的比較條件,提高效率。 

sql>delete from stu where rowid not in (select max(rowid) from stu t group by t.no, t.name, t.*** );

rowid去重(刪除表的重覆記錄)

構造測試環境 sql create table andy id int,name varchar2 10 table created.sql insert into andy values 1,a insert into andy values 2,b insert into andy values...

rowid去重(刪除表的重覆記錄)

構造測試環境 sql create table andy id int,name varchar2 10 table created.sql insert into andy values 1,a insert into andy values 2,b insert into andy values...

Oracle用rowid刪除同一張表的重覆記錄

經常有這樣乙個業務場景,我們在同一張表中有重複的記錄,我們要刪除重複的記錄,這篇文章就是用來解決這個問題的,用的方法是我目前遇到的效率最高的方法 如果有更好的方法歡迎提供 這個方法會用到了rowid,下面簡單介紹一下rowid的定義通常來說,乙個rowid值唯一標識資料中的一行。然而,儲存在同一聚簇...