oracle根據rowid進行去重

2021-10-12 17:56:21 字數 1106 閱讀 2725

正常的去重是根據distinct進行去重,distinct可以針對單個字段進行去重,但是用了之後發現問題還是有的,

單個欄位去重肯定是沒問題的,但是只要我的查詢條件中有了其他字段,oracle就會將我所有的查詢條件作為條件

判斷是否重複,好了,長話短說,舉個例子:

真相如圖所示。
那麼接下來就要看我們的rowid了,首先我們先了解下什麼是rowid,rowid其實就是儲存了位址,

我的理解就是乙個偽列,這個列代表的是資料位址,這個資料位址記錄了資料檔案的資料塊,

資料塊中的資料行,所以認為他是不重複的,所以rowid 約等於 不重複的id

上**:

select t1.

*from

sys_dept t1

where t1.rowid in

(select max

(t2.rowid)

from

sys_dept t2 where t1.

parent_id

=t2.

parent_id

)說說思路:這樣理解吧,t1當成表1,t2當成表2,where t1.

parent_id

=t2.

parent_id,關鍵來了,根據這

個條件查詢出來的資料肯定是很多條,那麼我們這查詢出的多條資料中的max

(rowid)

,得到的就是不重複的行資料了

實在不行就自己取個值進行,代入一下就真相大白了。

對錶進行ROWID切片

前言 對於乙個很大的分割槽表驚喜update,delete,想要加快執行速度,可以按照分割槽,在不同的會話中對每個分割槽表單獨進行update,delete。但是對乙個很大的非分割槽表進行update,delete,如果只在乙個會話裡執行sql,很容易引起undo不夠,如果會話連線中斷,會導致大量資...

Oracle查詢 rownum和rowid的區別

在oracle中,有乙個很有趣的東西,那就是rownum。當你從某個表中查詢資料的時候,返回的結果集中都會帶有rownum這個字段,而且有時候也可以使用rownum進行一些條件查詢。在查詢中,我們可以注意到,類似於 select xx from table where rownum n n 1 這樣...

oracle學習總結 一 ROWID

一.rowid簡介 rowid就是唯一標誌記錄物理位置的乙個id,在oracle 8版本以前,rowid由file block row 組成,占用6個bytes的空間,10 bit 的 file 22bit 的 block 16 bit 的 row 從oracle 8開始rowid變成了extend...