Det här handlar inte om olust som sådan, utan om PostgreSQL:s mycket konstiga hantering av flera set-returnerande funktioner i SELECT
lista. Ställ in återkommande funktioner i SELECT
är inte en del av ANSI SQL-standarden.
Du kommer att uppleva beteendet mycket sundare med LATERAL
frågor, som bör föredras framför att använda en set-returnerande funktion i FROM
så mycket som möjligt:
select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
t.ex.
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)
Den enda gången jag fortfarande använder flera set-retur-funktioner i SELECT
är när jag vill para ihop värden från funktioner som båda returnerar samma antal rader. Behovet av det kommer att försvinna i 9.4, med unnest
med flera argument och med stöd för WITH ORDINALITY
.