2010-05-26 4 views
29

Zajmuję się tworzeniem aplikacji internetowej i potrzebuję wyników uporządkowanych na stronie. Zwykle używam LIMIT/OFFSET do tego celu.Alternatywy dla LIMITU i PRZESUNIĘCIE dla stronicowania w Oracle

Jaki jest najlepszy sposób umieszczania uporządkowanych wyników w Oracle? Widziałem niektóre próbki przy użyciu rownum i podkwerend. Czy to sposób? Czy możesz dać mi próbkę do tłumaczenia tej SQL Oracle:

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

(używam Oracle 10g, na co warto)

Dzięki!


Odpowiedź: Korzystanie z linku podanego poniżej karim79, to SQL wyglądałby następująco:

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

myślę, że ostatni wiersz powinien raczej powiedzieć 'GDZIE rnum> 5' (nie'> = '), inaczej dostaniesz 15 rekordów, omijając tylko pierwsze cztery. – peterp

Odpowiedz

16

Skoro jesteś na 10g, powinieneś być w stanie uprościć podejście ROWNUM użyciu funkcji analitycznych

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

wielkie dzięki, to jest dokładnie to, czego potrzebowałem :) dlaczego oh dlaczego oracle nalega na robienie rzeczy na własnej skórze! – mic