- 構造測試環境
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 a2 b
3 c4 d
4 rows selected.
sql>
insert into andy values(4,'f');
insert into andy values(4,'d');
sql> select * from andy;
id name
---------- ----------
1 a2 b
3 c4 d
4 f4 d
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)
from andy
group by id);
2 rows deleted.
說明:記錄 4 f 被誤刪。
sql> select * from andy;
id name
---------- ----------
1 a2 b
3 c4 d
-- 構造與上面測試相同環境,即插入剛刪除的資料
sql>
insert into andy values(4,'f');
insert into andy values(4,'d');
sql> select * from andy;
id name
---------- ----------
1 a2 b
3 c4 d
4 f4 d
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/aal
1 a aaafktaaeaaacr/aaa
2 b aaafktaaeaaacr/aab
-- delete 重複資料時,group by 表的所有字段,發現沒有誤刪。
sql> delete from andy
where rowid not in (
select min(rowid)
from andy
group by id,name);
1 row deleted.
-- 檢查去重後的資料,發現沒有誤刪
sql> select * from andy;
id name
---------- ----------
1 a2 b
3 c4 d
4 f說明:
如果想通過rowid去重,那麼在 delete 重複資料時,需要group by 表的所有字段。如果只group by 表的個別字段,那麼會造成誤刪除
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...
oracle去除重覆記錄 去重 sql去重 記錄
關於oracle有關重複的問題經常遇到,不管是在面試還是在平常工作中,如果表中有重覆記錄很可能影響到一些業務的正常執行,每次遇到這樣的問題,老是記不住該怎麼辦,這次下決心寫個文章,來記錄一下。文中只是簡單的寫了2個例子,我感覺肯定還有更多的方式去處理這樣的問題,但是現在水平有限也只是寫了一點皮毛。表...
表刪除重覆記錄 小記
刪除資料庫中重覆記錄方法 表test loge 有兩個字段,乙個是 id,乙個是 name 我們需要刪除多餘的行 1 使用rowid 保留rowid 最大的值 delete from test loge a where rowid select max rowid from test loge b ...