Se eu usar a seguinte seleção
SELECT * FROM users WHERE id IN (3,1,2)
Posso esperar que o resultado esteja na mesma ordem dos IDs fornecidos?
Se eu usar a seguinte seleção
SELECT * FROM users WHERE id IN (3,1,2)
Posso esperar que o resultado esteja na mesma ordem dos IDs fornecidos?
Resposta curta: Não.
A única forma de garantir a ordem das linhas retornadas é através da cláusula "order by".
Você tem pouco ou nenhum controle sobre como o banco de dados escolhe "obter" qualquer um de seus dados e, portanto, a ordem em que ele chega a esses registros ao fazê-lo.
Você pode ter sorte e as coisas podem sair na ordem que você quer... mas não confie nisso.
Não, o SQL é uma linguagem declarativa, não procedural (principalmente), então você está apenas declarando quais informações deseja e, em seguida, o Otimizador decide como obtê-las e qual ordem retornar, a menos que você especifique.
Como os outros escreveram corretamente: não, você não pode confiar em nenhum pedido a menos que use um `pedido por
No entanto, se por algum motivo você precisar obter o resultado na ordem em que os parâmetros são especificados, será necessário usar uma consulta diferente:
O
unnest() with ordinality
cria uma coluna que indica a posição original do valor na matriz e que pode ser usada em um arquivoorder by
.Observe que isso se comportará de maneira diferente do
IN
operador se valores duplicados puderem ocorrer nessa lista. A junção retornará essas linhas duas vezes dausers
tabela,IN
mas não.