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
.