Oracle
 sql >> Datenbank >  >> RDS >> Oracle

sql (Oracle), um die ersten 10 Datensätze auszuwählen, dann die nächsten 10 und so weiter

Es gibt nur einen ziemlich komplizierten Weg, dies zu tun, was bei Oracle eine echte Qual ist. Sie sollten nur eine LIMIT/OFFSET-Klausel implementieren...

Die Zeilennummer wird nach zugewiesen die Zeile wurde durch die where-Klausel ausgewählt, sodass eine Zeilennummer immer mit 1 beginnen muss. where rownum > x wird immer als falsch ausgewertet.

Außerdem wird rownum vor dem Sortieren zugewiesen , also wird die Zeilennummer nicht in der gleichen Reihenfolge sein, wie Ihre Bestellung von sagt.

Sie können beide Probleme mit einem Subselect umgehen:

 select a,b,c, rn from 
    ( select a,b,c, rownum rn from 
         ( select a,b,c from the_table where x = ? order by c)
      where rownum < Y)
  where rn > X

Wenn Sie nicht sortieren müssen (aber nur dann), können Sie zu

vereinfachen
 select a,b,c, rn from
     ( select a,b,c, rownum rn from the_table where rownum < Y )
   where rn > X