* サブクエリで複数カラムを返す [#k7a78595]
** 命題 [#r6081516]
例えば以下のようにして、サブクエリでt1テーブルのidとnumという2つのカラムを返そうとすると、エラーになる。
SELECT t2.id, (SELECT id, num FROM t1 WHERE id % 2 = 0 ) FROM t2;
ERROR: subquery must return only one column
以下のようにサブクエリをカラム分だけ作れば期待した結果が得られるが、サブクエリを1つしか作らずに済ませたい。
SELECT t2.id, (SELECT id FROM t1 WHERE id % 2 = 0 ), (SELECT num FROM t1 WHERE id % 2 = 0) FROM t2;
** 解決方法 [#a43a2a10]
ARRAY()を使う。idとnumをいったんARRAYにして、そのARRAYを含んだ結果をインラインテーブルにして、配列の要素を取り出す。
SELECT x.id AS t2_id, arr[1] AS t1_id, arr[2] AS t1_num FROM (SELECT t2.id, (SELECT ARRAY[id,num] FROM t1 WHERE id % 2 = 0 ) AS arr FROM t2) AS x;