Nie chodzi tu o niezagnieżdżenie jako takie, ale o bardzo dziwną obsługę wielu funkcji zwracających zestawy w SELECT
PostgreSQL lista. Zestaw funkcji zwracania w SELECT
nie są częścią standardu ANSI SQL.
Przekonasz się, że zachowanie jest znacznie rozsądniejsze dzięki LATERAL
zapytania, które powinny być preferowane w stosunku do funkcji zwracających zestaw w FROM
jak najwięcej:
select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
np.
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)
Jedyny raz, kiedy nadal używam wielu funkcji zwracania zestawów w SELECT
jest wtedy, gdy chcę sparować wartości z funkcji, które zwracają tę samą liczbę wierszy. Potrzeba tego zniknie w wersji 9.4, z wieloargumentowym unnest
i z obsługą WITH ORDINALITY
.