2017-02-22 9 views
1

同じ名前の列を持つ2つのテーブルの結合を含むレコードをループするコードブロックがあります。レコードをループするときに等しく名前付き列にアクセスする

今、私はこれらの均等という名前の列の2の値が必要ですが、私は、「テーブルのFROM句エントリが不足して 『T1』を乗り越えることはできません。

DO $$ 
DECLARE 
    r record; 
BEGIN 
    FOR r IN SELECT t1.*, t2.* FROM Table1 t1 JOIN Table2 t2 ON t1.somecolumn = t2.somecolumn 
LOOP 
    INSERT INTO Table3 (column1, column2) 
    VALUES (r.t1.someotherColumn, r.t2.someotherColumn); 
      --^ error occurs here 
END LOOP; 
END$$; 
+1

あなたは明示的SELECT内のすべての列を一覧表示し、それらにエイリアスを与える必要があります。 –

+1

あなたは、R( 'としてあなたループヘッド&参照列にT1、t2'を選択'必要.t1).sotherotherColumn'をループ本体に入れてください。それ以外の場合は、エイリアスを使用して曖昧さを解決します。 – pozs

答えて

2

は、それぞれを参照するために(record).column構文を使用します。レコードの内部の複合型の。

do $$ 
declare r record; 
begin 
    for r in 
     select t1, t2 
     from 
      table1 t1 
      join 
      table2 t2 on t1.somecolumn = t2.somecolumn 
    loop 
     insert into table3 (column1, column2) 
     values (((r.t1).someothercolumn), ((r.t2).someothercolumn)); 
    end loop; 
end; $$; 
関連する問題