Oracle
 sql >> Base de données >  >> RDS >> Oracle

row num n'affiche aucune ligne lors de l'utilisation du mot-clé between

Oracle rownum commence à 1, donc vous n'obtiendrez jamais le premier rownum si vous dites between 2 and N .

Il faut une ligne pour "initier" la séquence de pseudo-colonnes rownum, donc en éliminant rownum 1 dans vos critères, vous éliminez tous les rownums (ou chaque ligne a essentiellement rownum 0 ).

Regarde ca comme ca. Vous n'obtenez pas de ROWNUM tant que la base de données ne vous renvoie pas de ligne. La première ligne de tout critère sera toujours ROWNUM 1.

Maintenant, l'astuce que vous pouvez utiliser est d'utiliser une sous-requête. Chaque sous-requête aura son propre rownum, et si vous l'associez à un autre nom de colonne, vous pouvez le conserver dans des requêtes externes et le traiter comme vous le souhaitez. Donc, si vous cherchez à implémenter la pagination d'un ensemble de résultats, vous devez normalement alias rownum des résultats internes comme rownum_ vers une sous-requête externe pour limiter avec BETWEEN.

select * from 
  (select t.*, rownum as rownum_ from t)
where rownum_ between 2 and 6

Mais notez que le jeu de résultats externe aura son propre numéro de ligne, vous pouvez donc :

select t2.*, rownum from 
  (select a, b, rownum as rownum_ from t) t2
where rownum_ between 2 and 6

Vous verrez rownum sur le résultat final commence toujours à 1, mais votre résultat interne aura rownum_ à partir de 2.