Oracle數據去重


一、完全重復數據去重方法

   具體思路是,首先創建一個臨時表,然后將DISTINCT之后的表數據插入到這個臨時表中;然后清空原表數據;再講臨時表中的數據插入到原表中;最后刪除臨時表。

  對於表中完全重復數據去重,可以采用以下SQL語句。

      --Code

     CREATE TABLE "#temp" AS (SELECTDISTINCT * FROM 表名);   --創建臨時表,並把DISTINCT 去重后的數據插入到臨時表中

     truncate TABLE 表名;   --清空原表數據

     INSERT INTO 表名 (SELECT * FROM "#temp");   --將臨時表數據插入到原表中

    DROP TABLE "#temp";   --刪除臨時表

 

 

二、部分數據去重方法 

我們可以考慮建立臨時表,將需要判斷重復的字段、rowid插入臨時表中,然后刪除的時候在進行比較。

createtable 臨時表 as
 
select a.字段1,a.字段2,MAX(a.ROWID) dataid from 正式表 a GROUPBY a.字段1,a.字段2;
 
deletefrom 表名 a
 
where a.rowid !=
 
(
 
select b.dataid from 臨時表 b
 
where a.字段1 = b.字段1 and
 
a.字段2 = b.字段2
 
);
 
commit;

實例:

-- 根據MAX(a.rowid)篩選重復的數據,獲得一張數據不重復的臨時表
create table 臨時表 as select a.ip,a.port,MAX(a.ROWID) dataid from ipresult a GROUP BY a.ip,a.port;
-- 刪除正式表中重復數據,只保留最新的一條數據 delete from ipresult a where a.rowid
!= ( select b.dataid from 臨時表 b where a.ip = b.ip and a.port= b.port );
--刪除臨時表並提交 drop table 臨時表; commit;

引用資料:

      Oracle數據庫中重復數據刪除方法:部分去重+完全去重’

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM