您的位置:首页 > 其它

删除重复记录的三种方法

2011-02-20 14:07 218 查看
本文介绍了三种删除重复记录的方法:

第一,二种方法利用了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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: