En Postgres 9.4 o posterior, esto es más simple y más 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
se introdujo en Postgres 9.4. -
No hay necesidad de una subconsulta, podemos usar la función de devolución de conjuntos como una tabla directamente. (A.k.a. "función de tabla".)
-
Un literal de cadena para entregar en la matriz en lugar de un constructor ARRAY puede ser más fácil de implementar con algunos clientes.
-
Para mayor comodidad (opcionalmente), copie el nombre de la columna a la que nos estamos uniendo (
id
en el ejemplo), por lo que podemos unirnos con un breveUSING
cláusula para obtener solo una instancia de la columna de combinación en el resultado. -
Funciona con cualquier tipo de entrada. Si su columna clave es de tipo
text
, proporciona algo como'{foo,bar,baz}'::text[]
.
Explicación detallada:
- PostgreSQL unnest() con número de elemento