des">
ORACLE中刪除重復(fù)記錄.doc

ORACLE中刪除重復(fù)記錄.doc

ID:52738238

大?。?9.50 KB

頁數(shù):6頁

時間:2020-03-30

ORACLE中刪除重復(fù)記錄.doc_第1頁
ORACLE中刪除重復(fù)記錄.doc_第2頁
ORACLE中刪除重復(fù)記錄.doc_第3頁
ORACLE中刪除重復(fù)記錄.doc_第4頁
ORACLE中刪除重復(fù)記錄.doc_第5頁
資源描述:

《ORACLE中刪除重復(fù)記錄.doc》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、ORACLE中刪除重復(fù)記錄平時工作中可能會遇見當(dāng)試圖對庫表中的某一列或幾列創(chuàng)建唯一索引時,系統(tǒng)提示ora-01452:不能創(chuàng)建唯一索引,發(fā)現(xiàn)重復(fù)記錄。下面總結(jié)一下幾種查找和刪除重復(fù)記錄的方法(以表cz為例):表cz的結(jié)構(gòu)如下:sql>desccznamenull?type-------------------------------------------------------------------c1number(10)c10number(5)c20varchar2(3)刪除重復(fù)記錄的方法原理:(1).在oracle中,

2、每一條記錄都有一個rowid,rowid在整個數(shù)據(jù)庫中是唯一的,rowid確定了每條記錄是在oracle中的哪一個數(shù)據(jù)文件、塊、行上。(2).在重復(fù)的記錄中,可能所有列的內(nèi)容都相同,但rowid不會相同,所以只要確定出重復(fù)記錄中那些具有最大rowid的就能了,其余全部刪除。重復(fù)記錄判斷的標(biāo)準(zhǔn)是:c1,c10和c20這三列的值都相同才算是重復(fù)記錄。經(jīng)查看表cz總共有16條記錄:sql>setpagesize100sql>select*fromcz;c1c10c20-----------------------12dsf12dsf

3、12dsf12dsf23che12dsf12dsf12dsf12dsf23che23che23che23che34dff34dff34dff45err53dar61wee72zxc20rowsselected.1.查找重復(fù)記錄的幾種方法:(1).sql>select*fromczgroupbyc1,c10,c20havingcount(*)>1;c1c10c20-----------------------12dsf23che34dff(2).sql>selectdistinct*fromcz;c1c10c20--------

4、---------------12dsf23che34dff(3).sql>select*fromczawhererowid=(selectmax(rowid)fromczwherec1=a.c1andc10=a.c10andc20=a.c20);c1c10c20-----------------------12dsf23che34dff2.刪除重復(fù)記錄的幾種方法:(1).適用于有大量重復(fù)記錄的情況(在c1,c10和c20列上建有索引的時候,用以下語句效率會非常高):sql>deleteczwhere(c1,c10,c20)i

5、n(selectc1,c10,c20fromczgroupbyc1,c10,c20havingcount(*)>1)androwidnotin(selectmin(rowid)fromczgroupbyc1,c10,c20havingcount(*)>1);sql>deleteczwhererowidnotin(selectmin(rowid)fromczgroupbyc1,c10,c20);(2).適用于有少量重復(fù)記錄的情況(注意,對于有大量重復(fù)記錄的情況,用以下語句效率會非常低):sql>deletefromczawher

6、ea.rowid!=(selectmax(rowid)fromczbwherea.c1=b.c1anda.c10=b.c10anda.c20=b.c20);sql>deletefromczawherea.rowid<(selectmax(rowid)fromczbwherea.c1=b.c1anda.c10=b.c10anda.c20=b.c20);sql>deletefromczawhererowid<(selectmax(rowid)fromczwherec1=a.c1andc10=a.c10andc20=a.c20);(

7、3).適用于有少量重復(fù)記錄的情況(臨時表法):sql>createtabletestasselectdistinct*fromcz;(建一個臨時表test用來存放重復(fù)的記錄)sql>truncatetablecz;(清空cz表的數(shù)據(jù),但保留cz表的結(jié)構(gòu))sql>insertintoczselect*fromtest;(再將臨時表test里的內(nèi)容反插回來)(4).適用于有大量重復(fù)記錄的情況(exceptioninto子句法):采用altertable命令中的exceptioninto子句也能確定出庫表中重復(fù)的記錄。這種方法稍微麻

8、煩一些,為了使用“excepeioninto”子句,必須首先創(chuàng)建exceptions表。創(chuàng)建該表的sql腳本文件為utlexcpt.sql。對于win2000系統(tǒng)和unix系統(tǒng),oracle存放該文件的位置稍有不同,在win2000系統(tǒng)下,該腳本文件存放在$oracle_ho

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。