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 ORDINALITYwurde 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 (
idim Beispiel), sodass wir mit einem kurzenUSINGverbinden 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
textist , geben Sie so etwas wie'{foo,bar,baz}'::text[]an .
Ausführliche Erklärung:
- PostgreSQL unnest() mit Elementnummer