oracle中删除重复记录

oracle中删除重复记录

ID:12136447

大小:39.50 KB

页数:10页

时间:2018-07-15

oracle中删除重复记录_第1页
oracle中删除重复记录_第2页
oracle中删除重复记录_第3页
oracle中删除重复记录_第4页
oracle中删除重复记录_第5页
资源描述:

《oracle中删除重复记录》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示ORA-01452:不能创建唯一索引,发现重复记录。  下面总结一下几种查找和删除重复记录的方法(以表CZ为例):  表CZ的结构如下:  SQL>desccz  NameNull?Type  -------------------------------------------------------------------  C1NUMBER(10)  C10NUMBER(5)  C20VARCHAR2(3)  删除重复记录的方法原理:  (1).在Oracle中,每一条记录

2、都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。  (2).在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大rowid的就可以了,其余全部删除。  重复记录判断的标准是:  C1,C10和C20这三列的值都相同才算是重复记录。  经查看表CZ总共有16条记录:  SQL>setpagesize100  SQL>select*fromcz;  C1C10C20  -----------------------  12dsf  1

3、2dsf  12dsf  12dsf  23che  12dsf  12dsf  12dsf  12dsf  23che  23che  23che  23che  34dff  34dff  34dff  45err  53dar  61wee  72zxc  20rowsselected.  1.查找重复记录的几种方法:  (1).SQL>select*fromczgroupbyc1,c10,c20havingcount(*)>1;  C1C10C20  -----------------------  12dsf  23che  34dff  

4、(2).SQL>selectdistinct*fromcz;  C1C10C20  -----------------------  12dsf  23che  34dff  (3).SQL>select*fromczawhererowid=(selectmax(rowid)fromczwherec1=a.c1andc10=a.c10andc20=a.c20);  C1C10C20  -----------------------  12dsf  23che  34dff  2.删除重复记录的几种方法:  (1).适用于有大量重复记录的情况(在C1,

5、C10和C20列上建有索引的时候,用以下语句效率会很高):  SQL>deletefromczwhere(c1,c10,c20)in(selectc1,c10,c20fromczgroupbyc1,c10,c20havingcount(*)>1)androwidnotin  (selectmin(rowid)fromczgroupbyc1,c10,c20havingcount(*)>1);  SQL>deletefronczwhererowidnotin(selectmin(rowid)fromczgroupbyc1,c10,c20);  (2).适

6、用于有少量重复记录的情况(注意,对于有大量重复记录的情况,用以下语句效率会很低):  SQL>deletefromczawherea.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<(selec

7、tmax(rowid)fromczwherec1=a.c1andc10=a.c10andc20=a.c20);  (3).适用于有少量重复记录的情况(临时表法):  SQL>createtabletestasselectdistinct*fromcz;(建一个临时表test用来存放重复的记录)  SQL>truncatetablecz;(清空cz表的数据,但保留cz表的结构)  SQL>insertintoczselect*fromtest;(再将临时表test里的内容反插回来)   (4).适用于有大量重复记录的情况(Exceptioninto子句

8、法):  采用altertable命令中的Exceptioninto子句也可以确定出库表中重复的记录。这种方

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。