2011-01-28 101 views
1

我有一個表table1澄清 「ROWNUM」

 

Name  Date
A 01-jun-2010
B 03-dec-2010
C 12-may-2010

當我查詢此表下面的查詢

select * from table1 where rownum=1 

我得到的輸出

 
Name  Date
A 01-jun-2010

但在同樣的方式,當我使用以下查詢我沒有得到任何輸出。

select * from table1 where rownum=2 
select * from table1 where rownum=3 

有人請給我指導爲什麼它的工作原理,以及如何使用rownum。

回答

4

Tom有許多Oracle相關的問題

總之一個答案,ROWNUM後可在where子句中已經應用和應用order by子句之前。

在ROWNUM = 2的情況下,在謂詞其中作爲ROWNUM從1開始且僅當匹配謂詞記錄可以發現增加子句永遠不會求值爲真。

2

(不通過任何方式的甲骨文專家)

據我瞭解,ROWNUM數字在結果集的行

所以,在你的榜樣:

select * from table1 where rownum=2 

多少行,有要在結果集?因此,什麼rownum將被分配到這樣一排?你現在可以看到爲什麼沒有結果實際返回?

一般來說,您應該避免依賴rownum或任何暗示命令結果的功能。試着考慮處理整套結果。

有了這樣說,我相信以下將工作:

select * from (select rownum as rn,table1.* from table1) as t where t.rn = 2 

因爲在這種情況下,你的編號子查詢中的行。

+0

您可能不認爲自己是Oracle專家,但您的回答是正確的。此外,如果在內部查詢中使用「table1。*」而不是普通星號,則第二個查詢將按預期工作。 – Allan 2011-01-31 15:23:50

2

添加rownums是從數據庫中獲取結果集之後完成的最後一件事情之一。這意味着第一行將始終有rownum 1.當您想限制結果集時,例如在進行分頁時,Rownum更適用。

更多的顯示方式:http://www.orafaq.com/wiki/ROWNUM