下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Oracle 刪除表中重復數據我們可能會出現這種情況,某個表原來設計不周全,導致表里面的數據數據 重復,那么,如何對重復的數據進行刪除呢?重復的數據可能有這樣兩種情況,第一種時表中只有某些字段一樣,第二種是兩行記錄完全一樣。一、對于部分字段重復數據的刪除先來談談如何查詢重復的數據吧。下面語句可以查詢出那些數據是重復的:select 字段1,字段2,count(*) from 表名 group by 字段 1,字段 2 havingcount(*) 1將上面的 號改為 =號就可以查詢出沒有重復的數據了。想要刪除這些重復的數據,可以使用下面語句進行刪除delete from 表名 a where
2、字段 1,字段 2 in(select 字段 1,字段 2,count(*) from 表名 group by 字段 1,字段 2 having count(*) 1)上面的語句非常簡單,就是將查詢到的數據刪除掉。不過這種刪除執(zhí)行的效率非常低,對于大數據量來說,可能會將數據庫吊死。所以我建議先將查詢到的重復的數據插入到一個臨時表中,然后對進行刪除,這樣,執(zhí)行刪除的時候就不用再進行一次查詢了。如下:CREATE TABLE 臨時表 AS(select 字段1,字段2,count(*) from 表名 group by 字段 1,字段 2 havingcount(*) 1)上面這句話就是建立了臨時
3、表,并將查詢到的數據插入其中。下面就可以進行這樣的刪除操作了:delete from 表名 a where 字段1,字段2 in (select 字段 1, 字段 2 from 臨時表 );這種先建臨時表再進行刪除的操作要比直接用一條語句進行刪除要高效得多。這個時候,大家可能會跳出來說,什么?你叫我們執(zhí)行這種語句,那不是把所有重復的全都刪除嗎?而我們想保留重復數據中最新的一條記錄??!大家不要急,下面我就講一下如何進行這種操作。在 oracle 中,有個隱藏了自動 rowid ,里面給每條記錄一個唯一的rowid , *8tHV*T&管業(yè)專Ax我們如果想保留最新的一條記錄,jmK10u=教我們就
4、可以利用這個字段,保留重復數據中 rowid 最大的一條記錄就可以 了。下面是查詢重復數據的一個例子:select a.rowid,a.* from 表名 awhere a.rowid !=(select max(b.rowid) from 表名 bwhere a. 字段 1 = b. 字段 1 anda.字段2 = b.字段2)下面我就來講解一下,1(T0JI=3 網 aC 上面括號中的語句是查詢出重復數據中 rowid 最大的一條記錄。而外面就是查詢出除了rowid 最大之外的其他重復的數據了。由此,我們要刪除重復數據,只保留最新的一條數據,就可以這樣寫了:delete from 表名 a
5、where a.rowid !=(select max(b.rowid) from 表名 bwhere a. 字段 1 = b. 字段 1 anda.字段2 = b.字段2)隨便說一下,上面語句的執(zhí)行效率是很低的,可以考慮建立臨時表,講需要判斷重復的字段、 rowid 插入臨時表中,然后刪除的時候在進行比較。create table 臨時表 asselect a.字段 1,a.字段 2,MAX(a.ROWID) dataid from 正式表 a GROUP BY a.字段1,a.字段2;delete from 表名 awhere a.rowid !=(select b.dataid from
6、 臨時表 bwhere a.字段 1 = b.字段 1 anda.字段2 = b.字段2);commit;Delete from 表 awhere a.rowid not in(select distinct臨時表b.dataid一新增臨時表給rowid取的列名from 臨 時表b,testwhere 臨時表 b.id = 表 a.id and 臨時表 = )二、對于完全重復記錄的刪除對于表中兩行記錄完全一樣的情況,可以用下面語句獲取到去掉重復 數據后的記錄:select distinct * from 表名可以將查詢的記錄放到臨時表中,然后再將原來的表記錄刪除
7、,最后將臨時 表的數據導回原來的表中。如下:CREATE TABLE 臨時表 AS (select distinct * from 表名);drop table 正式表;insert into 正式表 (select * from 臨時表);drop table 臨時表;如果想刪除一個表的重復數據,可以先建一個臨時表,將去掉重復數據 后的數據導入到臨時表,然后在從臨時表將數據導入正式表中,如下:INSERT INTO t_table_bakselect distinct * from t_table;刪除重復數據總的分2種:a。刪除完全重復列的數據;bo刪除不完全重復列的數據。1。刪除完全重復
8、列的數據;這相對簡單,創(chuàng)建一張新表(create table as (select distinct * from 原表), 刪除原來的表(Drop table原表),把新表名字重命名。2。刪除不完全重復列的數據;這又分為重復記錄保留1條,或不保留。案例新建表test。create table test(id number,name varchar2(20);select * from test;test表列重復的數據全部刪除新建臨時表test2create table test2 as(select name,id,count(*) shuliang from test group by n
9、ame,id having count(*)1);-shuliang為count(*)的定義的列名。select * from test2;NAME ID J SHULIANG 1A刪除所有重復數據delete from test where (id,name) in(select id,name from test2 )test表列重復的數據刪除僅保留一條新建臨時表test3create table test3 as(select id ,name,max(rouwid) dataid from test group by id,name );select * from test3;| ID .NAMEDATAIDZT- AAAMThAAEAAAAFmAAG 2_ 2 a AAAMThAAEAAAAFmAAB 工 3 : b- AMMTlWXEAWFrnAAC司 在 jAAAMThAAEAAAAFmAAE刪除test表重復數據,重復數據保留一條delete from test where test.rowid not in(select distin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 多層陶瓷片式電感市場現狀及未來發(fā)展趨勢(2024版)
- 融文:2024撰寫現代化PR報告的專業(yè)指南
- 榮泰煤礦6-2中煤大巷煤柱回收開采方案
- 水源地合理開采及恢復機制研究
- 廣州-PEP-2024年11版小學4年級上冊英語第6單元測驗試卷
- Python程序設計實踐-教學大綱、授課計劃
- 2024年電能儀表項目資金需求報告代可行性研究報告
- 預制菜分類原則(征求意見稿)編制說明
- 珠寶銷售個人工作計劃
- 新娘結婚致辭
- HAF003《核電廠質量保證安全規(guī)定》的理解要點共課件
- 二年級下冊語文課件 貓和老鼠的故事 全國通用
- 慢性淋巴細胞白血病-課件
- 22G101-1與16G101-1的圖集差異
- 《針織學》期末考試試卷附答案
- 特種設備使用登記表(范本)
- (完整版)5以內的加減法(可直接打印)
- 智能物流-完整版課件(全)
- 新疆準東經濟技術開發(fā)區(qū)西部固廢處置場項目環(huán)評報告書
- GB∕T 36008-2018 機器人與機器人裝備 協作機器人
- (新版)保衛(wèi)管理員考試題庫(含答案)
評論
0/150
提交評論