删除重复记录的三种方法

时间:2021-08-07 22:12:47

本文介绍了三种删除重复记录的方法:

第一,二种方法利用了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>