色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

Oracle中查找和刪除重復記錄方法簡介

瀏覽:2日期:2023-11-24 18:42:17
平時工作中可能會碰到當試圖對庫表中的某一列或幾列創(chuàng)建唯一索引時,系統提示 ORA-01452 :不能創(chuàng)建唯一索引,發(fā)現重復記錄。 下面總結一下幾種查找和刪除重復記錄的方法(以表CZ為例): 表CZ的結構如下: SQL> desc czName Null? Type----------------------------------------- C1 NUMBER(10)C10 NUMBER(5)C20 VARCHAR2(3)刪除重復記錄的方法原理: (1).在Oracle中,每一條記錄都有一個rowid,rowid在整個數據庫中是唯一的,rowid確定了每條記錄是在Oracle中的哪一個數據文件、塊、行上。 (2).在重復的記錄中,可能所有列的內容都相同,但rowid不會相同,所以只要確定出重復記錄中那些具有最大rowid的就可以了,其余全部刪除。 重復記錄判定的標準是: C1,C10和C20這三列的值都相同才算是重復記錄。 經查看表CZ總共有16條記錄: SQL>set pagesize 100SQL>select * from cz;C1 C10 C20---------- ---------- ---1 2 dsf1 2 dsf1 2 dsf1 2 dsf2 3 che1 2 dsf1 2 dsf1 2 dsf1 2 dsf2 3 che2 3 che2 3 che2 3 che3 4 dff3 4 dff3 4 dff4 5 err5 3 dar6 1 wee7 2 zxc20 rows selected.1.查找重復記錄的幾種方法: (1).SQL>select * from cz group by c1,c10,c20 having count(*) >1;C1 C10 C20---------- ---------- ---1 2 dsf2 3 che3 4 dff(2).SQL>select distinct * from cz;C1 C10 C20---------- ---------- ---1 2 dsf2 3 che3 4 dff(3).SQL>select * from cz a where rowid=(select max(rowid) from cz where c1=a.c1 and c10=a.c10 and c20=a.c20);C1 C10 C20---------- ---------- ---1 2 dsf2 3 che3 4 dff2.刪除重復記錄的幾種方法: (1).適用于有大量重復記錄的情況(在C1,C10和C20列上建有索引的時候,用以下語句效率會很高): SQL>delete cz where (c1,c10,c20) in (select c1,c10,c20 from cz group by c1,c10,c20 having count(*)>1) and rowid not in(select min(rowid) from cz group by c1,c10,c20 having count(*)>1);SQL>delete cz where rowid not in(select min(rowid) from cz group by c1,c10,c20);(2).適用于有少量重復記錄的情況(注重,對于有大量重復記錄的情況,用以下語句效率會很低): SQL>delete from cz a where a.rowid!=(select max(rowid) from cz b where a.c1=b.c1 and a.c10=b.c10 and a.c20=b.c20);SQL>delete from cz a where a.rowid<(select max(rowid) from cz b where a.c1=b.c1 and a.c10=b.c10 and a.c20=b.c20);SQL>delete from cz a where rowid <(select max(rowid) from cz where c1=a.c1 and c10=a.c10 and c20=a.c20);(3).適用于有少量重復記錄的情況(臨時表法): SQL>create table test as select distinct * from cz; (建一個臨時表test用來存放重復的記錄)SQL>truncate table cz; (清空cz表的數據,但保留cz表的結構)SQL>insert into cz select * from test; (再將臨時表test里的內容反插回來)(4).適用于有大量重復記錄的情況(Exception into 子句法): 采用alter table 命令中的 Exception into 子句也可以確定出庫表中重復的記錄。這種方法稍微麻煩一些,為了使用“excepeion into ”子句,必須首先創(chuàng)建 EXCEPTIONS 表。創(chuàng)建該表的 SQL 腳本文件為 utlexcpt.sql 。對于win2000系統和 UNIX 系統, Oracle 存放該文件的位置稍有不同,在win2000系統下,該腳本文件存放在$ORACLE_HOMEOra90rdbmsadmin 目錄下;而對于 UNIX 系統,該腳本文件存放在$ORACLE_HOME/rdbms/admin 目錄下。 具體步驟如下: SQL>@?/rdbms/admin/utlexcpt.sqlTable created.SQL>desc exceptionsName Null? Type----------------------------------------- ROW_ID ROWIDOWNER VARCHAR2(30)TABLE_NAME VARCHAR2(30)CONSTRAINT VARCHAR2(30)SQL>alter table cz add constraint cz_unique unique(c1,c10,c20) exceptions into exceptions; *ERROR at line 1:ORA-02299: cannot validate (TEST.CZ_UNIQUE) - duplicate keys foundSQL>create table dups as select * from cz where rowid in (select row_id from exceptions); Table created.SQL>select * from dups; C1 C10 C20---------- ---------- ---1 2 dsf1 2 dsf1 2 dsf1 2 dsf2 3 che1 2 dsf1 2 dsf1 2 dsf1 2 dsf2 3 che2 3 che2 3 che2 3 che3 4 dff3 4 dff3 4 dff16 rows selected.SQL>select row_id from exceptions;ROW_ID------------------AAAHD/AAIAAAADSAAAAAAHD/AAIAAAADSAABAAAHD/AAIAAAADSAACAAAHD/AAIAAAADSAAFAAAHD/AAIAAAADSAAHAAAHD/AAIAAAADSAAIAAAHD/AAIAAAADSAAGAAAHD/AAIAAAADSAADAAAHD/AAIAAAADSAAEAAAHD/AAIAAAADSAAJAAAHD/AAIAAAADSAAKAAAHD/AAIAAAADSAALAAAHD/AAIAAAADSAAMAAAHD/AAIAAAADSAANAAAHD/AAIAAAADSAAOAAAHD/AAIAAAADSAAP16 rows selected.SQL>delete from cz where rowid in ( select row_id from exceptions);16 rows deleted.SQL>insert into cz select distinct * from dups;3 rows created.SQL>select *from cz;C1 C10 C20---------- ---------- ---1 2 dsf2 3 che3 4 dff4 5 err5 3 dar6 1 wee7 2 zxc7 rows selected.從結果里可以看到重復記錄已經刪除。
標簽: Oracle 數據庫
主站蜘蛛池模板: 免费观看一级特黄欧美大片 | 一级片免费在线 | 亚洲成人黄色在线观看 | 91精品国产免费久久国语蜜臀 | 亚洲99在线的 | 久久 精品 一区二区 | 美国的毛片免费的 | 亚洲欧美一区二区三区不卡 | 中文字幕福利视频 | 精品久久久久久久九九九精品 | 青青热久久国产久精品 | 亚洲欧洲国产成人综合一本 | 国内精品久久久久久影院老狼 | 男女男免费视频网站国产 | 日韩欧美在线视频一区二区 | 97婷婷狠狠成人免费视频 | 日韩永久在线观看免费视频 | 免费黄网在线观看 | a级片免费观看视频 | 国产免费成人在线视频 | 亚洲国产天堂久久精品网 | 免费日本在线视频 | 久久综合狠狠综合狠狠 | 一级毛片一级毛片a毛片欧美 | 成人网在线视频 | 日韩日b视频 | 性猛交毛片 | 欧美成人久久 | 精品中文字幕在线 | 欧美亚洲国产成人不卡 | 在线精品国产三级 | 加勒比色综合 | 国产第二页 | 国产精品一二三区 | 114一级毛片免费 | 5级做人爱c视版免费视频 | 久久久久综合一本久道 | 91免费高清视频 | 91资源在线 | 久香草视频在线观看 | 国产成人综合网亚洲欧美在线 |