PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

ORDER BY a lista de valores IN


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 curto USING 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 tipo text , forneça algo como '{foo,bar,baz}'::text[] .

Explicação detalhada:
  • PostgreSQL unnest() com número do elemento