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

SQL mehrfaches UNNEST in Einzelauswahlliste

Hier geht es nicht um Unnest als solches, sondern um PostgreSQLs sehr seltsamen Umgang mit mehreren Set-Returning-Funktionen im SELECT aufführen. Satzrückgabefunktionen in SELECT sind nicht Teil des ANSI-SQL-Standards.

Sie werden feststellen, dass das Verhalten mit LATERAL viel gesünder ist Abfragen, die der Verwendung einer Set-Returning-Funktion in FROM vorgezogen werden sollten so viel wie möglich:

select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;

z. B.

regress=> select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
 a | b 
---+---
 1 | 1
 1 | 2
 1 | 3
 2 | 1
 2 | 2
 2 | 3
(6 rows)

Das einzige Mal, dass ich noch mehrere Set-Returning-Funktionen in SELECT verwende ist, wenn ich Werte von Funktionen paaren möchte, die beide die gleiche Anzahl von Zeilen zurückgeben. Die Notwendigkeit dafür wird in 9.4 verschwinden, mit Multi-Argument unnest und mit Unterstützung für WITH ORDINALITY .