No Postgres 9.4 ou posterior, isso é mais simples e rápido :
SELECT c.*
FROM comments c
JOIN unnest('{1,3,2,4}'::int[]) WITH ORDINALITY t(id, ord) USING (id)
ORDER BY t.ord;
-
WITH ORDINALITY
foi introduzido no Postgres 9.4.
-
Não há necessidade de uma subconsulta, podemos usar a função set-returning como uma tabela diretamente. (A.k.a. "função de tabela".)
-
Um literal de string para entregar no array em vez de um construtor ARRAY pode ser mais fácil de implementar com alguns clientes.
-
Por conveniência (opcionalmente), copie o nome da coluna à qual estamos unindo (id
no exemplo), para que possamos unir com um curtoUSING
cláusula para obter apenas uma única instância da coluna de junção no resultado.
-
Funciona com qualquer tipo de entrada. Se sua coluna chave for do tipotext
, forneça algo como'{foo,bar,baz}'::text[]
.
Explicação detalhada:
- PostgreSQL unnest() com número do elemento