使用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>