unnest
を呼び出しています FROM
で3回 句、つまりCROSS JOIN
を実行していることを意味します 3の(デカルト積)。
PostgreSQL 9.4以降を使用している場合は、unnest
を1回呼び出すだけです。 各配列を入力として与える:
select * from
unnest(
array['2001622', '2001624', '2007903'],
array[15,14,8],
array['type1', 'type1', 'type1'],
array[false, true, true]
) as u(id, ver, type, enabled)
別のオプションは、どのバージョンでも、呼び出しをunnest
に追加することです。 SELECT
で FROM
の代わりに :
select
unnest(array['2001622', '2001624', '2007903']) as id,
unnest(array[15,14,8]) as ver,
unnest(array['type1', 'type1', 'type1']) as type,
unnest(array[false, true, true]) as enabled
どちらの場合も、特に最後の場合は、各配列にまったく同じ数の要素があることを確認する必要があります。最初のメソッドにない場合、欠落している各行はNULLとして埋められますが、2番目のメソッドでは、 LCM それぞれによって返される行数のうち、おそらく望ましくないものです。例:
SELECT * FROM unnest(array[1,2,3,4], array['a','b','c','d','e','f']);
unnest | unnest
--------+--------
1 | a
2 | b
3 | c
4 | d
[null] | e
[null] | f
(6 rows)
SELECT unnest(array[1,2,3,4]), unnest(array['a','b','c','d','e','f']);
unnest | unnest
--------+--------
1 | a
2 | b
3 | c
4 | d
1 | e
2 | f
3 | a
4 | b
1 | c
2 | d
3 | e
4 | f
(12 rows)
テーブル関数呼び出しのドキュメントを確認してください。 a> 詳細については。