欢迎来到天天文库
浏览记录
ID:12136447
大小:39.50 KB
页数:10页
时间:2018-07-15
《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子句也可以确定出库表中重复的记录。这种方
此文档下载收益归作者所有