1. 程式人生 > 其它 >使用 ROWID 查詢,刪除重複資料(Oracle)

使用 ROWID 查詢,刪除重複資料(Oracle)

Oracle中的rowid

ROWID是ORACLE中的一個重要的概念。用於定位資料庫中一條記錄的一個相對唯一地址值。通常情況下,該值在該行資料插入到資料庫表時即被確定且唯一。ROWID它是一個偽列,它並不實際存在於表中。它是ORACLE在讀取表中資料行時,根據每一行資料的實體地址資訊編碼而成的一個偽列。所以根據一行資料的ROWID能找到一行資料的實體地址資訊。從而快速地定位到資料行。資料庫的大多數操作都是通過ROWID來完成的,而且使用ROWID來進行單記錄定位速度是最快的。

要理解索引,必須先搞清楚ROWID。

B-Tree索引的每個索引條目具有兩個欄位。第一個欄位表示索引的鍵值,對於單列索引來說是一個值;而對於多列索引來說則是多個值組合在一起的。第二個欄位表示鍵值所對應的記錄行的ROWID。所以索引能加快查詢速度!

索引值→ROWID->將ROWID換算成一行資料的實體地址->得到一行資料

rowid採用64進位制來編碼

編碼方法是:A~Z表示0到25;a~z表示26到51;0~9表示52到61;+表示62;/表示63;剛好64個字元。

傳送門:https://www.cnblogs.com/xqzt/p/4449184.html

搬磚分割線

————————————————————————————————————————————————————————————————————————————————————————————————————————————

具體解析:

--建立測試資料

create table test_EMP (EMP_NO varchar2(20) )

insert into test_EMP (EMP_NO) values ('1');
insert into test_EMP (EMP_NO) values ('1');
insert into test_EMP (EMP_NO) values ('GG1GG');
insert into test_EMP (EMP_NO) values ('GG1GG');
insert into test_EMP (EMP_NO) values ('2');
insert into test_EMP (EMP_NO) values ('G2G');


--思路:
--先檢視rowid
select t.EMP_NO,rownum,rowid from test_EMP t



--根據重複欄位分組,找出最大的rowid值
select t.EMP_NO,max(rowid) from test_EMP t group by t.EMP_NO;


--使用子查詢關聯查詢,找出比max(rowid)小的重複值
select b.EMP_NO, rowid from test_EMP b where rowid< (select max(rowid) from test_EMP where EMP_NO=b.EMP_NO);



--直接刪除那些重複的值,若資料量較大,建議通過臨時表來進行資料操作,也就是先儲存不重複資料,再drop/create table,然後insert into
delete from test_EMP b where rowid< (select max(rowid) from test_EMP where EMP_NO=b.EMP_NO); --沒跑過,原理一樣

delete資料篩選流程:

EMP_NO      rownum 跑資料

1       AAFmXWAAcAAP+rvAAA form (f代替)這一行,子查詢內 select max(rowid) from test_EMP where EMP_NO='1',查出AAFmXWAAcAAP+rvAAB ,外層 where rowid< (AAFmXWAAcAAP+rvAAB) ,於是刪除當前行

1       AAFmXWAAcAAP+rvAAB       f 這一行,子查詢內 select max(rowid) from test_EMP where EMP_NO=‘1’,查出AAFmXWAAcAAP+rvAAB ,外層where rowid< (AAFmXWAAcAAP+rvAAB) ,於是保留資料
GG1GG   AAFmXWAAcAAP+rvAAC
3      AAFmXWAAcAAP+rvAAF
2       AAFmXWAAcAAP+rvAAG
GG1GG   AAFmXWAAcAAP+rvAAI

rowid 唯一欄位的應用,在其他資料庫可以用其他的 唯一欄位 代替

子查詢隱式分組 傳送門:https://blog.csdn.net/zhou920786312/article/details/72599547