正常的去重是根據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...