V Postgres 9.4 nebo novější, je to nejjednodušší a nejrychlejší :
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
byl představen v Postgres 9.4. -
Není potřeba poddotaz, můžeme přímo použít funkci set-returning jako tabulku. (také znám jako "tabulka-funkce".)
-
Řetězcový literál k předání pole namísto konstruktoru ARRAY může být snazší implementovat u některých klientů.
-
Pro usnadnění (volitelně) zkopírujte název sloupce, ke kterému se připojujeme (
id
v příkladu), takže se můžeme připojit pomocí krátkéhoUSING
klauzule k získání pouze jedné instance sloupce spojení ve výsledku. -
Funguje s jakýmkoli Typ vstupu. Pokud je váš klíčový sloupec typu
text
, zadejte něco jako'{foo,bar,baz}'::text[]
.
Podrobné vysvětlení:
- PostgreSQL unnest() s číslem prvku