天天看點

rowid去重(删除表的重複記錄)

- 構造測試環境

SQL> create table andy(id int,name varchar2(10));

Table created.

SQL>

insert into andy values(1,'a');

insert into andy values(2,'b');

insert into andy values(3,'c');

insert into andy values(4,'d');

SQL> select * from andy;

ID NAME

---------- ----------

1 a

2 b

3 c

4 d

4 rows selected.

SQL> 

insert into andy values(4,'f');

4 f

6 rows selected.

-- 依次group by 表所有字段,通過min(rowid)檢視所有唯一記錄(去重記錄,也就是相同多行資料隻顯示一行)

SQL> select id,name,min(rowid)

from andy

group by id,name; 

ID NAME MIN(ROWID)

---------- ---------- ------------------

3 c AAAfKTAAEAAACr/AAC

4 d AAAfKTAAEAAACr/AAD

4 f AAAfKTAAEAAACr/AAJ

1 a AAAfKTAAEAAACr/AAA

2 b AAAfKTAAEAAACr/AAB

-- delete 重複資料時,group by 表的個别字段,發現誤删除

SQL> delete from andy

where rowid not in (

select min(rowid)

group by id); 

2 rows deleted.

說明:記錄 4 f 被誤删。

-- 構造與上面測試相同環境,即插入剛删除的資料

4 f AAAfKTAAEAAACr/AAL

-- delete 重複資料時,group by 表的所有字段,發現沒有誤删。

group by id,name); 

1 row deleted.

-- 檢查去重後的資料,發現沒有誤删

說明:

如果想通過rowid去重,那麼在 delete 重複資料時,需要group by 表的所有字段。如果隻group by 表的個别字段,那麼會造成誤删除

本文轉自 張沖andy 部落格園部落格,原文連結: http://www.cnblogs.com/andy6/p/6900926.html  ,如需轉載請自行聯系原作者

繼續閱讀