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