本文介绍了三种删除重复记录的方法:
第一,二种方法利用了oracle的rowid。
第三种方法用到了临时表。
oracle中每行记录都有一个oracle自动产生的唯一标识即ROWID,我们利用它可以方便的删除表中的重复记录。
SQL> SELECT ROWID , ID FROM A;
ROWID ID
---------------------------- ----------
AAASlAAAGAAAAHDAAA 1
AAASlAAAGAAAAHDAAB 2
AAASlAAAGAAAAHDAAC 3
AAASlAAAGAAAAHGAAA 6
AAASlAAAGAAAAHGAAB 6
虽然A表中有两条ID为6的记录,但我们看到这两天记录的ROWID是不同的,
利用这个特点我们可以删除表中的重复记录。
方法一:
SQL> DELETE FROM A WHERE rowid not in (SELECT MIN(ROWID) FROM A GROUP BY ID);
1 row deleted
SQL> SELECT * FROM A;
ID
----------
1
2
3
6
方法二:
SQL> DELETE FROM a
2 WHERE ROWID != (SELECT MAX(ROWID) FROM a B WHERE a.id = B.Id);
1 row deleted
SQL> SELECT * FROM A;
ID
----------
1
2
3
6
方法三:临时表
1.建临时表temp_a1,临时表中存放没有重复的记录。
SQL> CREATE TABLE temp_a1 as
2 SELECT DISTINCT id from a;
Table created
SQL> SELECT * FROM TEMP_A1;
ID
----------
1
6
2
3
2.清空a表的数据
SQL> truncate table a;
Table truncated
3.将临时表temp_a1中的记录插入到a表中
SQL> INSERT INTO A
2 SELECT ID FROM TEMP_A1;
4 rows inserted
SQL> SELECT * FROM A;
ID
----------
1
6
2
3
SQL>