2014-01-20 47 views
0

根據此link,在查詢中使用rownum時,按以下操作順序調用它。在Oracle中澄清rownum操作順序

The FROM/WHERE clause goes first. 
ROWNUM is assigned and incremented to each output row from the FROM/WHERE clause. 
SELECT is applied. 
GROUP BY is applied. 
HAVING is applied. 
ORDER BY is applied. 

我想知道AND將在何處分類到此列表中。是否會在WHERE的同時進行評估?如果WHERErownumAND不是?

+3

你指的是哪個'AND'? 'AND'不是一個子句 - 它是一個組合表達式組成一個子句的一部分的關鍵字。因此,它將被評估爲它所屬的任何子句...... – PinnyM

+1

並且僅在WHERE子句中添加附加約束。 – OldProgrammer

+0

@OldProgrammer。 。 。 'AND'也可以用在'case'語句中,該語句可以出現在'select','group by','having'和'order by'子句中。 –

回答

1

AND在此沒有任何作用。當結果集正在構建時,rownum會在最外層排序之前分配給結果。在ROWNUM上進行過濾是從執行計劃的更深入來的結果。因此,例如像where rownum > 5這樣的結構不返回任何行。

希望這會有所幫助。如果沒有,請詳細說明你的問題和/或解釋你爲什麼問。有些替代品有時更好,如row_number()

-1

我只是有一個更新沒有工作,其中field_value不爲空,rownum = 1。 因爲rownum = 1是有一個field_value = null的行,它是厭倦返回,然後沒有行動發生在更新中。

因此,在Where子句中還有一個操作順序。 需要放在它周圍或使其成爲子查詢,以確保rownum是其他部分的結果。

我對我的情況使用了不同的rownum = 1。

+0

請詳細解釋這個問題,它不是很清楚,只針對一個具體案例,而不是一般問題。 – mdurant