サブクエリで複数カラムを返す

命題

例えば以下のようにして、サブクエリで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;

解決方法

配列コンストラクタを使う。idとnumをいったん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;

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS