正 文

Oracle实用技巧


www.7dspace.com  更新日期:2005-11-4 1:51:14  七度空间


4.删除表中重复记录

方法原理:

1、Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,  rowid确定了每条记录是在ORACLE中的哪一个数据文件、块、行上。

2、在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大rowid的就可以了,其余全部删除。

实现方法:

SQL> create table a(bm char(4),mc varchar2(20));

Table created

SQL> insert into a values('1111','aaaa');

SQL> insert into a values('1112','aaaa');

SQL> insert into a values('1113','aaaa');

SQL> insert into a values('1114','aaaa');

SQL> insert into a select * from a;

4 rows inserted

SQL> commit;

Commit complete

SQL> select rowid,bm,mc from a;

ROWID BM MC

------------------ ---- --------------------

AAAIRIAAQAAAAJqAAA 1111 aaaa

AAAIRIAAQAAAAJqAAB 1112 aaaa

AAAIRIAAQAAAAJqAAC 1113 aaaa

AAAIRIAAQAAAAJqAAD 1114 aaaa

AAAIRIAAQAAAAJqAAE 1111 aaaa

AAAIRIAAQAAAAJqAAF 1112 aaaa

AAAIRIAAQAAAAJqAAG 1113 aaaa

AAAIRIAAQAAAAJqAAH 1114 aaaa

8 rows selected

查出重复记录

SQL> select rowid,bm,mc from a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);

ROWID BM MC

------------------ ---- --------------------

AAAIRIAAQAAAAJqAAA 1111 aaaa

AAAIRIAAQAAAAJqAAB 1112 aaaa

AAAIRIAAQAAAAJqAAC 1113 aaaa

AAAIRIAAQAAAAJqAAD 1114 aaaa

删除重复记录

SQL> delete from a a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);

删除4个记录.

SQL> select rowid,bm,mc from a;

ROWID BM MC

------------------ ---- -----

AAAIRIAAQAAAAJqAAE 1111 aaaa

AAAIRIAAQAAAAJqAAF 1112 aaaa

AAAIRIAAQAAAAJqAAG 1113 aaaa

AAAIRIAAQAAAAJqAAH 1114 aaaa

4页,页码:[1] [2] [3] [4] 

上一篇:Ajax铺设了更好的开发Web应用的道路
下一篇:如何阻止缓存投毒攻击
作者:  来源:网络整理 ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐