PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

ORDRE PAR la liste de valeurs IN

Dans Postgres 9.4 ou plus tard, c'est le plus simple et le plus rapide :

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 a été introduit avec dans Postgres 9.4.

  • Pas besoin de sous-requête, nous pouvons utiliser directement la fonction de retour d'ensemble comme une table. (A.k.a. "fonction de table".)

  • Un littéral de chaîne à remettre dans le tableau au lieu d'un constructeur ARRAY peut être plus facile à implémenter avec certains clients.

  • Pour plus de commodité (facultatif), copiez le nom de la colonne à laquelle nous nous joignons (id dans l'exemple), nous pouvons donc joindre avec un court USING clause pour n'obtenir qu'une seule instance de la colonne de jointure dans le résultat.

  • Fonctionne avec tout type d'entrée. Si votre colonne clé est de type text , fournissez quelque chose comme '{foo,bar,baz}'::text[] .

Explication détaillée :

  • PostgreSQL unnest() avec le numéro d'élément