2017-02-22 74 views
1

我有一個代碼塊,在該代碼塊中循環包含具有一些同名命名列的兩個表的連接的記錄。在循環記錄時訪問同名命名列

現在我需要的其中兩個同樣名爲列的值,但我不能讓過去的「失蹤子句條目表‘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

你需要明確列出你的選擇所有列,並給他們的別名。 –

+1

需要'選擇T1,t2'在循環頭部和參考列作爲'(R .t1).someotherColumn'在你的循環體中,否則你需要提及所有列明確地使用別名來解決歧義。 – 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; $$;