熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle數據庫重復數據刪除的三種情況

2022-06-13   來源: Oracle 

  在對數據庫進行操作過程中我們可能會遇到這種情況表中的數據可能重復出現使我們對數據庫的操作過程中帶來很多的不便那麼怎麼刪除這些重復沒有用的數據呢?

  重復數據刪除技術可以提供更大的備份容量實現更長時間的數據保留還能實現備份數據的持續驗證提高數據恢復服務水平方便實現數據容災等 重復的數據可能有這樣兩種情況第一種時表中只有某些字段一樣第二種是兩行記錄完全一樣Oracle數據庫重復數據刪除技術有如下優勢更大的備份容量數據能得到持續驗證有更高的數據恢復服務水平方便實現備份數據的容災

  刪除部分字段重復數據

  先來談談如何查詢重復的數據吧

  下面語句可以查詢出那些數據是重復的

  select 字段字段count(*) from 表名 group by 字段字段 having count(*) >

  將上面的>號改為=號就可以查詢出沒有重復的數據了

  想要刪除這些重復的數據可以使用下面語句進行刪除

  delete from 表名 a where 字段字段 in

  (select 字段字段count(*) from 表名 group by 字段字段 having count(*) >

  上面的語句非常簡單就是將查詢到的數據刪除掉不過這種刪除執行的效率非常低對於大數據量來說可能會將數據庫吊死所以我建議先將查詢到的重復的數據插入到一個臨時表中然後對進行刪除這樣執行刪除的時候就不用再進行一次查詢了如下

  CREATE TABLE 臨時表 AS

  (select 字段字段count(*) from 表名 group by 字段字段 having count(*) >

  上面這句話就是建立了臨時表並將查詢到的數據插入其中

  下面就可以進行這樣的刪除操作了

  delete from 表名 a where 字段字段 in (select 字段字段 from 臨時表)

  這種先建臨時表再進行刪除的操作要比直接用一條語句進行刪除要高效得多

  這個時候大家可能會跳出來說什麼?你叫我們執行這種語句那不是把所有重復的全都刪除嗎?而我們想保留重復數據中最新的一條記錄啊!大家不要急下面我就講一下如何進行這種操作

  在oracle中有個隱藏了自動rowid裡面給每條記錄一個唯一的rowid我們如果想保留最新的一條記錄

  我們就可以利用這個字段保留重復數據中rowid最大的一條記錄就可以了

  下面是查詢重復數據的一個例子

    select arowida* from 表名 a
  where arowid !=
  (
  select max(browid) from 表名 b
  where a字段 = b字段 and
  a字段 = b字段
  )

  下面我就來講解一下上面括號中的語句是查詢出重復數據中rowid最大的一條記錄

  而外面就是查詢出除了rowid最大之外的其他重復的數據了

  由此我們要刪除重復數據只保留最新的一條數據就可以這樣寫了

     delete from 表名 a
  where arowid !=
  (
  select max(browid) from 表名 b
  where a字段 = b字段 and
  a字段 = b字段
  )

  隨便說一下上面語句的執行效率是很低的可以考慮建立臨時表講需要判斷重復的字段rowid插入臨時表中然後刪除的時候在進行比較

     create table 臨時表 as
  select a字段a字段MAX(aROWID) dataid from 正式表 a GROUP BY a字段a字段;
  delete from 表名 a
  where arowid !=
  (
  select bdataid from 臨時表 b
  where a字段 = b字段 and
  a字段 = b字段
  );
  commit;

  完全刪除重復記錄

  對於表中兩行記錄完全一樣的情況可以用下面語句獲取到去掉重復數據後的記錄

  select distinct * from 表名

  可以將查詢的記錄放到臨時表中然後再將原來的表記錄刪除最後將臨時表的數據導回原來的表中如下

     CREATE TABLE 臨時表 AS (select distinct * from 表名);

  truncate table 正式表; 原先由於筆誤寫成了drop table 正式表;現在已經改正過來

  insert into 正式表 (select * from 臨時表);

  drop table 臨時表;

  如果想刪除一個表的重復數據可以先建一個臨時表將去掉重復數據後的數據導入到臨時表然後在從臨時表將數據導入正式表中如下

     INSERT INTO t_table_bak
  select distinct * from t_table;

  怎樣快速刪除oracle數據庫

  最快的方法就進入注冊表 在運行……裡輸入regedit

  依次展開HKEY_LOCAL_MACHINE SOFTWARE

  找到ORACLE節點刪除

  然後刪除ORACLE數據文件安裝的時候選的路徑

  最後刪除oracle引導文件在系統盤符的Program Files 裡面刪除oracle文件夾


From:http://tw.wingwit.com/Article/program/Oracle/201311/17162.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.