2017-02-22 71 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; $$;