58

Web アプリケーションを開発していて、順序付けされた結果をページングする必要があります。私は通常、この目的のために LIMIT/OFFSET を使用します。

Oracleで順序付けされた結果をページングする最良の方法はどれですか? rownum とサブクエリを使用したサンプルをいくつか見てきました。その通りですか?この SQL を Oracle に変換するサンプルを教えてください。

SELECT fieldA,fieldB 
FROM table 
ORDER BY fieldA 
OFFSET 5 LIMIT 14

(私は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
4

4 に答える 4

33

Oracle 12c の時点で、上位 N 個のクエリを使用できました。

SELECT fieldA,fieldB 
FROM table 
ORDER BY fieldA 
OFFSET 5 ROWS FETCH NEXT 14 ROWS ONLY;

http://www.oracle-base.com/articles/12c/row-limiting-clause-for-top-n-queries-12cr1.php

于 2014-09-01T06:33:46.270 に答える
22

10g を使用しているため、分析関数を使用して ROWNUM アプローチを簡素化できるはずです

SELECT fieldA, 
       fieldB
  FROM (SELECT fieldA,
               fieldB,
               row_number() over (order by fieldA) rnk
          FROM table_name)
 WHERE rnk BETWEEN 5 AND 14;
于 2011-03-07T15:30:27.620 に答える
18

rownum結果を制限するには、疑似列を使用する必要があります。ここを参照してください:

http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html

http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html

于 2010-05-26T10:47:27.033 に答える