刪除表中重複資料

2021-07-31 10:54:21 字數 855 閱讀 2252

如果重複資料很多,被刪掉的可能是大部分記錄,業務又允許的情況下,可以考慮重建表

create table newtable as select distinct * from table;

rename table to oldtable;

rename newtable to table;

create index and constraint...

如果重複資料較少,利用rowid來刪除:

delete table t1 where rowid < (select max(rowid) from table t2 where t1.col1 = t2.col1 and t1.col2 = t2.col2 and t1.col3 = t2.col3 ....)

這裡要包含所有的字段相等的條件,還要考慮有的字段可能為null的情況,因為null是不等於null的,因此,對可能為null的字段有可能要寫成nvl(t1.col4,'***') = nvl(t2.col4,'***')

上面的語句,效率未必好得到哪去,如果是9i 或以上版本,還可以考慮使用分析函式

delete table where rowid in (

select rid from (

select t.rowid rid, row_number() over(partition by col1, col2, col3 .... order by rowid) rn from table

) where rn > 1 )

如果你的系統業務繁忙,需要刪除資料的表較大,事務也非常繁忙,那最好是別用一條delete語句來做刪除操作,最好寫pl/sql,通過游標取出重複的那部分記錄的rowid,然後批量繫結,批量刪除,批量提交。

刪除表中重複資料

刪除表中重複資料 取出line fancy2表中fancy name相同的最小fancy id 寫進tmp表 create table tmp as select min fancy id as col1 from line fancy2 group by fancy name 刪除line fan...

Oracle刪除表中重複資料

1.建立臨時表 備份全部資料到 create table tmap.t comm customer col log 731all as select from tmap.t comm customer col log 2.建立臨時表 備份資料 去除重複項 create table tmap.t co...

Mysql刪除表中重複資料

一張表中有重複資料,需要刪除重複的資料,只保留 最大 最小 一條。例 現有a表 id 主鍵 唯一 b 資料 有重複 需求 刪除表中重複的資料,保留相同資料中id最小的資料。效果 sql思路 先查詢出去重過後的id 可用分組 再刪除其它id的資料 delete from a where id not ...