sql >> Database >  >> RDS >> Oracle

sql (oracle) om de eerste 10 records te selecteren, dan de volgende 10, enzovoort

Er is alleen een nogal ingewikkelde manier om dit te doen, wat erg lastig is met Oracle. Ze zouden gewoon een LIMIT/OFFSET-clausule moeten implementeren...

Het rijnummer wordt na . toegewezen de rij is geselecteerd door de waar-clausule, zodat een rijnummer altijd moet beginnen met 1. where rownum > x zal altijd evalueren naar onwaar.

Rownum wordt ook toegewezen voordat het sorteren is voltooid , dus het rijnummer zal niet in dezelfde volgorde staan ​​als uw bestelling door zegt.

U kunt beide problemen omzeilen met een subselectie:

 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

Als u niet hoeft te sorteren (maar alleen dan), kunt u vereenvoudigen tot

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


  1. Wijzigingen tussen rijen efficiënt bepalen met behulp van SQL

  2. Alternatief wanneer IN-clausule wordt ingevoerd VEEL waarden (postgreSQL)

  3. MAAK TABEL ZOALS A1 als A2

  4. MySQL-query traag bij gebruik van Order By met functie om de afstand tussen twee punten te berekenen (lang, lat)