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 courtUSING
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