W Postgresie 9.4 lub później, jest to najprostsze i najszybsze :
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
został wprowadzony w Postgresie 9.4. -
Nie ma potrzeby wykonywania podzapytania, możemy użyć funkcji zwracania zestawu bezpośrednio jak tabeli. (inaczej "funkcja tabeli".)
-
Literał ciągu do podania w tablicy zamiast konstruktora ARRAY może być łatwiejszy do zaimplementowania w przypadku niektórych klientów.
-
Dla wygody (opcjonalnie) skopiuj nazwę kolumny, do której się przyłączamy (
id
w przykładzie), więc możemy dołączyć za pomocą krótkiegoUSING
klauzula, aby w wyniku uzyskać tylko jedno wystąpienie kolumny sprzężenia. -
Działa z dowolnym typ wejścia. Jeśli kolumna klucza ma typ
text
, podaj coś w stylu'{foo,bar,baz}'::text[]
.
Szczegółowe wyjaśnienie:
- PostgreSQL unnest() z numerem elementu