In Postgres 9.4 oder später ist dies am einfachsten und schnellsten :
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
wurde mit in Postgres 9.4 eingeführt. -
Eine Unterabfrage ist nicht erforderlich, wir können die Set-Returning-Funktion wie eine Tabelle direkt verwenden. (A.k.a. "Tabellenfunktion".)
-
Ein String-Literal, das anstelle eines ARRAY-Konstruktors im Array übergeben wird, ist möglicherweise bei einigen Clients einfacher zu implementieren.
-
Kopieren Sie der Einfachheit halber (optional) den Spaltennamen, mit dem wir verbinden (
id
im Beispiel), sodass wir mit einem kurzenUSING
verbinden können -Klausel, um nur eine einzige Instanz der Join-Spalte im Ergebnis zu erhalten. -
Funktioniert mit beliebigen Eingabetyp. Wenn Ihre Schlüsselspalte vom Typ
text
ist , geben Sie so etwas wie'{foo,bar,baz}'::text[]
an .
Ausführliche Erklärung:
- PostgreSQL unnest() mit Elementnummer