PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

ORDER BY die IN-Werteliste

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 kurzen USING 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