sql >> Base de Datos >  >> RDS >> PostgreSQL

ORDENAR POR la ​​lista de valores IN

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 breve USING 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