2010-05-26 146 views
29

我正在開發一個Web應用程序,並且需要頁面排序結果。我爲此正常使用LIMIT/OFFSET。在Oracle中用於分頁的LIMIT和OFFSET的替代方案

哪種方法可以在Oracle中分頁排序結果?我看過一些使用rownum和子查詢的示例。那是這樣嗎?你能給我一個樣品翻譯此SQL到Oracle:

​​

(我使用的是Oracle 10g中,爲它的價值)

謝謝!


答: 使用karim79下面提供的鏈接,這個SQL就像:

SELECT * FROM (
    SELECT rownum rnum, a.* 
    FROM(
     SELECT fieldA,fieldB 
     FROM table 
     ORDER BY fieldA 
    ) a 
    WHERE rownum <=5+14 
) 
WHERE rnum >=5 
+0

我認爲最後一行應,而說'WHERE RNUM> 5'(不'> ='),否則你會得到15條記錄,僅前四跳過。 – peterp 2013-07-11 09:19:03

回答

15
+0

該鏈接不再有效。 – codevour 2011-03-28 12:00:08

+0

有趣的閱讀如何rownum如何運作:http://blog.lishman.com/2008/03/rownum.html – xastor 2011-10-07 13:03:28

+0

更新斷開的鏈接。希望這個人繼續工作:-)。 – sleske 2012-11-06 10:07:55

16

既然你是在10g中,你應該能夠簡化使用解析函數

SELECT fieldA, 
     fieldB 
    FROM (SELECT fieldA, 
       fieldB, 
       row_number() over (order by fieldA) rnk 
      FROM table_name) 
WHERE rnk BETWEEN 5 AND 14; 
+2

非常感謝,這正是我所需要的:)爲什麼哦爲什麼oracle堅持做事難! – mic 2014-04-08 13:09:23