在oracle中利用rowid查找和删除表中的重复记录

在oracle中利用rowid查找和删除表中的重复记录

ID:6607425

大小:30.50 KB

页数:8页

时间:2018-01-20

在oracle中利用rowid查找和删除表中的重复记录_第1页
在oracle中利用rowid查找和删除表中的重复记录_第2页
在oracle中利用rowid查找和删除表中的重复记录_第3页
在oracle中利用rowid查找和删除表中的重复记录_第4页
在oracle中利用rowid查找和删除表中的重复记录_第5页
资源描述:

《在oracle中利用rowid查找和删除表中的重复记录》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、在Oracle中利用Rowid查找和删除表中的重复记录在Oracle中利用Rowid查找和删除表中的重复记录.txt爱情就像脚上的鞋,只有失去的时候才知道赤脚走路是什么滋味骗人有风险,说慌要谨慎。不要爱上年纪小的男人,他会把你当成爱情学校,一旦学徒圆满,便会义无反顾地离开你。在Oracle中利用Rowid查找和删除表中的重复记录.txt师太,你是我心中的魔,贫僧离你越近,就离佛越远……初中的体育老师说:谁敢再穿裙子上我的课,就罚她倒立。平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示ORA-01452:不能创建唯一索引,发现重

2、复记录。下面总结一下几种查找和删除重复记录的方法(以表CZ为例):表CZ的结构如下:SQL>descczNameNull?Type-------------------------------------------------------------------C1NUMBER(10)C10NUMBER(5)C20VARCHAR2(3)删除重复记录的方法原理:(1).在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。(2).在重复的记录中,可能所有

3、列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大rowid的就可以了,其余全部删除。重复记录判断的标准是:C1,C10和C20这三列的值都相同才算是重复记录。经查看表CZ总共有16条记录:SQL>setpagesize100SQL>select*fromcz;C1C10C20-----------------------12dsf12dsf12dsf12dsf23che12dsf12dsf12dsf12dsf23che23che23che23che34dff34dff34dff45err53dar61wee72zxc20ro

4、wsselected.1.查找重复记录的几种方法:(1).SQL>select*fromczgroupbyc1,c10,c20havingcount(*)>1;C1C10C20-----------------------12dsf23che34dff(2).SQL>selectdistinct*fromcz;C1C10C20-----------------------12dsf23che34dff(3).SQL>select*fromczawhererowid=(selectmax(rowid)fromczwherec1=a.c1andc10=a

5、.c10andc20=a.c20);C1C10C20-----------------------12dsf23che34dff2.删除重复记录的几种方法:(1).适用于有大量重复记录的情况(在C1,C10和C20列上建有索引的时候,用以下语句效率会很高):SQL>deleteczwhere(c1,c10,c20)in(selectc1,c10,c20fromczgroupbyc1,c10,c20havingcount(*)>1)androwidnotin(selectmin(rowid)fromczgroupbyc1,c10,c20havingco

6、unt(*)>1);SQL>deleteczwhererowidnotin(selectmin(rowid)fromczgroupbyc1,c10,c20);(2).适用于有少量重复记录的情况(注意,对于有大量重复记录的情况,用以下语句效率会很低):SQL>deletefromczawherea.rowid!=(selectmax(rowid)fromczbwherea.c1=b.c1anda.c10=b.c10anda.c20=b.c20);SQL>deletefromczawherea.rowid<(selectmax(rowid)fromczb

7、wherea.c1=b.c1anda.c10=b.c10anda.c20=b.c20);SQL>deletefromczawhererowid<(selectmax(rowid)fromczwherec1=a.c1andc10=a.c10andc20=a.c20);(3).适用于有少量重复记录的情况(临时表法):SQL>createtabletestasselectdistinct*fromcz;(建一个临时表test用来存放重复的记录)SQL>truncatetablecz;(清空cz表的数据,但保留cz表的结构)SQL>insertintoczs

8、elect*fromtest;(再将临时表test里的内容反插回来)(4).适用于有大量重复记录的情况(Ex

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

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

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