2010-05-26 3 views
29

Je développe une application Web et j'ai besoin de pages classées résultats. J'utilise normalement LIMIT/OFFSET à cette fin.Alternatives à LIMIT et OFFSET pour la radiomessagerie dans Oracle

Quelle est la meilleure façon de classer les résultats commandés dans Oracle? J'ai vu des exemples utilisant rownum et sous-requêtes. Est-ce le chemin? Pourriez-vous me donner un exemple pour traduire ce SQL à Oracle:

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

(J'utilise Oracle 10g, pour ce que ça vaut)

Merci!


Réponse: En utilisant le lien ci-dessous par karim79, ce SQL ressemblerait à ceci:

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

Je pense que la dernière ligne devrait plutôt dire 'WHERE rnum> 5' (non'> = '), sinon vous obtiendrez 15 dossiers, sauter seulement les quatre premiers. – peterp

Répondre

15
+0

Le lien ne fonctionne plus. – codevour

+0

intéressant lire sur comment fonctionne rownum: http://blog.lishman.com/2008/03/rownum.html – xastor

+0

Mis à jour le lien brisé. J'espère que celui-ci continue à travailler :-). – sleske

16

Puisque vous êtes sur 10g, vous devriez être en mesure de simplifier l'approche ROWNUM en utilisant des fonctions analytiques

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

merci beaucoup, c'est exactement ce dont j'avais besoin :) pourquoi oh pourquoi insiste à faire les choses à la dure! – mic

Questions connexes