日期:2014-05-16  浏览次数:20401 次

使用ROWID查找和删除重复行

使用ROWID查找和删除重复行

SQL> create table tab4test(
  2  c1 char(4),
  3  c2 varchar2(20)
  4  )
  5  /

表已创建。

                                        
SQL> insert into tab4test values('1111','1111');

已创建 1 行。

SQL> insert into tab4test values('1112','1111');

已创建 1 行。

SQL> insert into tab4test values('1113','1111');

已创建 1 行。

SQL> insert into tab4test values('1114','1111');

已创建 1 行。

SQL> commit;

提交完成。

SQL>




创建重复记录:
SQL> insert into tab4test select * from tab4test;

已创建4行。

SQL> commit;

提交完成。

SQL> select rowid,c1,c2 from tab4test;

ROWID              C1   C2
------------------ ---- --------------------
AAAG/OAAGAAAAAMAAA 1111 1111
AAAG/OAAGAAAAAMAAB 1112 1111
AAAG/OAAGAAAAAMAAC 1113 1111
AAAG/OAAGAAAAAMAAD 1114 1111
AAAG/OAAGAAAAAMAAE 1111 1111
AAAG/OAAGAAAAAMAAF 1112 1111
AAAG/OAAGAAAAAMAAG 1113 1111
AAAG/OAAGAAAAAMAAH 1114 1111

已选择8行。

SQL>


查出重复记录
SQL> select rowid,c1,c2
  2  from tab4test
  3  where lunar.rowid!=(select max(rowid)
  4             from tab4test b
  5             where tab4test.c1=b.c1 and tab4test.c2=b.c2);

ROWID              C1   C2
------------------ ---- --------------------
AAAG/OAAGAAAAAMAAA 1111 1111
AAAG/OAAGAAAAAMAAB 1112 1111
AAAG/OAAGAAAAAMAAC 1113 1111
AAAG/OAAGAAAAAMAAD 1114 1111

SQL>



删除重复记录:
SQL> delete from tab4test a
  2  where a.rowid!=(select max(rowid)
  3             from tab4test b
  4             where a.c1=b.c1 and a.c2=b.c2);

已删除4行。

SQL> commit;

提交完成。

SQL> select rowid,c1,c2 from tab4test;

ROWID              C1   C2
------------------ ---- --------------------
AAAG/OAAGAAAAAMAAE 1111 1111
AAAG/OAAGAAAAAMAAF 1112 1111
AAAG/OAAGAAAAAMAAG 1113 1111
AAAG/OAAGAAAAAMAAH 1114 1111

SQL>