在循环记录时访问同名命名列
问题描述:
我有一个代码块,在该代码块中循环包含具有一些同名命名列的两个表的连接的记录。在循环记录时访问同名命名列
现在我需要的其中两个同样名为列的值,但我不能让过去的“失踪子句条目表‘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$$;
答
使用(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; $$;
你需要明确列出你的选择所有列,并给他们的别名。 –
需要'选择T1,t2'在循环头部和参考列作为'(R .t1).someotherColumn'在你的循环体中,否则你需要提及所有列明确地使用别名来解决歧义。 – pozs