I Postgres 9.4 eller senare, detta är enklast och snabbast :
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
introducerades med i Postgres 9.4. -
Inget behov av en underfråga, vi kan använda set-retur-funktionen som en tabell direkt. (A.k.a. "tabellfunktion".)
-
En bokstavlig sträng att lämna in arrayen istället för en ARRAY-konstruktor kan vara lättare att implementera med vissa klienter.
-
För enkelhetens skull (valfritt), kopiera kolumnnamnet som vi ansluter till (
id
i exemplet), så att vi kan ansluta med en kortUSING
sats för att bara få en enda instans av join-kolumnen i resultatet. -
Fungerar med alla ingångstyp. Om din nyckelkolumn är av typen
text
, ange något som'{foo,bar,baz}'::text[]
.
Detaljerad förklaring:
- PostgreSQL unnest() med elementnummer