sql >> Database >  >> RDS >> Oracle

rijnummer geeft geen rijen weer bij gebruik tussen trefwoord

Oracle rijnummer begint bij 1, dus je krijgt nooit het eerste rijnummer als je between 2 and N zegt .

Er is een rij nodig om de rijnummer-pseudokolomreeks te "initieren", dus door rijnummer 1 in uw criteria te elimineren, elimineert u alle rijnummers (of elke rij heeft in wezen rijnummer 0 ).

Bekijk het zo. U krijgt geen ROWNUM totdat de database een rij naar u terugstuurt. De eerste rij van elk criterium is altijd ROWNUM 1.

De truc die u kunt gebruiken, is om een ​​​​subquery te gebruiken. Elke subquery heeft zijn eigen rownum, en als u het een alias geeft naar een andere kolomnaam, kunt u het bewaren in buitenste query's en het behandelen zoals u wilt. Dus als je paging van een resultatenset wilt implementeren, alias je rownum normaal gesproken van inner results als rownum_ naar een outer subquery om te beperken met TUSSEN.

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

Houd er echter rekening mee dat de buitenste resultaatset zijn eigen rijnummer heeft, dus u kunt het volgende doen:

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

U ziet rownum op het eindresultaat begint nog steeds bij 1, maar je innerlijke resultaat zal rownum_ . hebben vanaf 2.



  1. SQL Hoe de SUM van kolom over groep in dezelfde tabel te updaten

  2. to_sql pyodbc count veld onjuist of syntaxisfout

  3. Afbeelding direct in database opslaan of als base64-gegevens?

  4. Afkappen (niet ronde) decimalen in SQL Server