Nejde o unnest jako takový, ale o velmi podivné zacházení PostgreSQL s více funkcemi vracejícími sadu v SELECT
seznam. Nastavte funkce vracení v SELECT
nejsou součástí standardu ANSI SQL.
S LATERAL
najdete chování mnohem rozumnější dotazy, které by měly být upřednostňovány před použitím funkce vracející sadu v FROM
co nejvíce:
select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
např.
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)
Jediný případ, kdy stále používám více funkcí vracejících sadu v SELECT
je, když chci spárovat hodnoty z funkcí, které obě vracejí stejný počet řádků. Potřeba toho zmizí ve verzi 9.4 s více argumenty unnest
a s podporou WITH ORDINALITY
.