Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

número de linha não está exibindo nenhuma linha ao usar entre a palavra-chave


Oracle rownum começa em 1, então você nunca obterá o primeiro rownum se disser between 2 and N .

É preciso uma linha para "iniciar" a sequência de pseudocoluna rownum, portanto, eliminando rownum 1 em seus critérios, você elimina todos os rownums (ou cada linha essencialmente tem rownum 0 ).

Olhe assim. Você não obtém um ROWNUM até que o banco de dados retorne uma linha para você. A primeira linha de qualquer critério será sempre ROWNUM 1.

Agora, o truque que você pode usar é usar uma subconsulta. Cada subconsulta terá seu próprio número de linha e, se você o alias a outro nome de coluna, poderá preservá-lo em consultas externas e tratá-lo como quiser. Portanto, se você deseja implementar a paginação de um conjunto de resultados, normalmente usaria o alias rownum de resultados internos como rownum_ para uma subconsulta externa para limitar com BETWEEN.
select * from 
  (select t.*, rownum as rownum_ from t)
where rownum_ between 2 and 6

Mas observe que o conjunto de resultados externo terá seu próprio rownum, então você pode fazer:
select t2.*, rownum from 
  (select a, b, rownum as rownum_ from t) t2
where rownum_ between 2 and 6

Você verá rownum no resultado final ainda começa em 1, mas seu resultado interno terá rownum_ começando em 2.