PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

SQL multipli UNNEST in un unico elenco di selezione

Non si tratta di unnest in quanto tale, ma della gestione molto strana da parte di PostgreSQL di più funzioni di restituzione di set nel SELECT elenco. Funzioni di ritorno degli insiemi in SELECT non fanno parte dello standard ANSI SQL.

Troverai un comportamento molto più sano con LATERAL query, che dovrebbero essere preferite rispetto all'utilizzo di una funzione di restituzione di set in FROM il più possibile:

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

es.

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)

L'unica volta in cui utilizzo ancora più funzioni di restituzione di set in SELECT è quando voglio accoppiare valori da funzioni che restituiscono entrambi lo stesso numero di righe. La necessità scomparirà in 9.4, con il multi-argomento unnest e con il supporto per WITH ORDINALITY .