Qual é a diferença entre FETCH FIRST
e FETCH NEXT
no PostgreSQL? Os documentos simplesmente dizem
NEXT Busca a próxima linha
FIRST Busque a primeira linha da consulta
o que não é muita explicação. Criei uma tabela de amostra com linhas de amostra, executada
SELECT * from users
FETCH FIRST 2 ROWS ONLY;
SELECT * from users
FETCH NEXT 2 ROWS ONLY;
e obteve exatamente a mesma saída. É quase como se FETCH FIRST
e FETCH NEXT
fossem apenas sinônimos de LIMIT
(que, pelo que li, não faz parte do padrão SQL, ao contrário do FETCH [FIRST|NEXT]
)
Se os dois são iguais, por que a documentação não diz isso? Ou existem algumas diferenças, afinal?
Esta resposta do Stack Overflow implica que eles podem funcionar da mesma maneira em pelo menos alguns RDBMSes, especificamente no MS Server
O
FETCH
comando cuja página de documentação você vinculou é diferente das opçõesFETCH FIRST
eFETCH NEXT
em uma instrução SELECT. Estes últimos são descritos emSELECT
:Portanto, não apenas não há diferença entre FIRST e NEXT nesse contexto, mas eles podem ser totalmente omitidos.
O comportamento é o mesmo de LIMIT, exceto que LIMIT não é capaz de contar linhas idênticas como uma linha, ao contrário de FETCH com sua opção WITH TIES.
No caso do comando FETCH para cursores, o comportamento de FETCH NEXT e FETCH FIRST são diferentes. Por exemplo, esta sequência de declarações:
show que
FETCH FIRST c
remonta à primeira linha de resultados: