oracle去除重覆記錄 去重 sql去重 記錄

2021-07-10 19:16:37 字數 1500 閱讀 3067

關於oracle有關重複的問題經常遇到,不管是在面試還是在平常工作中,如果表中有重覆記錄很可能影響到一些業務的正常執行,每次遇到這樣的問題,老是記不住該怎麼辦,這次下決心寫個文章,來記錄一下。

文中只是簡單的寫了2個例子,我感覺肯定還有更多的方式去處理這樣的問題,但是現在水平有限也只是寫了一點皮毛。

表jintest

create table jintest

(id   varchar2(10),

name varchar2(10),

age  number

);插入幾條記錄

insert into jintest (id, name, age)

values ('1', '名字', 30);

insert into jintest (id, name, age)

values ('2', '名字', 30);

insert into jintest (id, name, age)

values ('3', '名字', 30);

insert into jintest (id, name, age)

values ('4', '名字2', 30);

insert into jintest (id, name, age)

values ('5', '名字3', 30);

insert into jintest (id, name, age)

values ('6', '名字3', 30);

insert into jintest (id, name, age)

values ('7', '名字3', 30);

如果id列為(unique)約束或主鍵(primary key)約束,我們可以通過分組,然後取最大最小值來解決。

比如現在要刪除表中name,age相同的記錄。

delete from jintest t1

where t1.id not in (select max(id) from jintest t group by t.name, t.age);

或者 delete from jintest t1

where t1.id not in (select min(id) from jintest t group by t.name, t.age);

如果刪除id,name,age都重複的記錄該怎麼做呢?

我們可以使用oracle自帶的乙個關鍵字rowid,那這樣就變成了

delete from jintest t1

where rowid not in

(select max(rowid) from jintest t group by t.id, t.name, t.age);

或者delete from jintest t1

where rowid not in

(select min(rowid) from jintest t group by t.id, t.name, t.age);

這樣應該也是挺簡單的啊!

Oracle中去除重覆記錄的方法

參考 1 使用distinct關鍵字 1 建立臨時表 2create table t 1 temp as select distinct from t 1 t 3 截斷表4 truncate table t 1 5 將臨時表的資料插入到本表 6insert into t 1 select from ...

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...