本文介绍了三种删除重复记录的方法:
第一,二种方法利用了oracle的rowid。
第三种方法用到了临时表。
oracle中每行记录都有一个oracle自动产生的唯一标识即ROWID,我们利用它可以方便的删除表中的重复记录。
SQL> SELECT ROWID , ID FROM A;
ROWID ID---------------------------- ----------AAASlAAAGAAAAHDAAA 1AAASlAAAGAAAAHDAAB 2AAASlAAAGAAAAHDAAC 3AAASlAAAGAAAAHGAAA 6AAASlAAAGAAAAHGAAB 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>
