これは、それ自体がおかしなことではありませんが、PostgreSQLがSELECT
で複数のセットを返す関数を非常に奇妙に処理していることについてです。 リスト。セット-SELECT
の関数を返す ANSISQL規格の一部ではありません。
LATERAL
を使用すると、動作が非常に簡単になります。 クエリ。FROM
でセットを返す関数を使用するよりも優先されます。 可能な限り:
select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
例:
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)
SELECT
でまだ複数のセットを返す関数を使用しているのはこのときだけです 両方が同じ行数を返す関数の値をペアにしたいときです。その必要性は9.4でなくなり、複数の引数を持つunnest
WITH ORDINALITY
をサポートしています 。