我正在运行Postgres 9.1并拥有一个包含30个空列和30个额外临时表(returns.msf_mse
- temp23_01
)的主表(temp23_30
)。我想用来自每个临时表的特定列的数据填充主表中的每个空列。每个临时表中的相关列始终为cumret_past
。
我试图创建一个存储过程/函数来实现这一点并且一直无处可去。我也尝试循环更新语句但无法使其工作。我的基本查询是:
update returns.msf_mse as a
set cumret_past_23_01 = b.cumret_past
from temp23_01 as b
where a.date = b.date
and a.permno = b.permno;
我只想运行此语句30次,每次递增cumret_past_23_i
和temp23_i
。
答案 0 :(得分:0)
您可以使用DO
语句(第9.0+页)和EXECUTE
来遍历所有表:
DO
$$
BEGIN
FOR i IN 1..30 LOOP
EXECUTE '
UPDATE returns.msf_mse a
SET cumret_past_23_' || to_char(i, 'FM00') || ' = b.cumret_past
FROM temp23_' || to_char(i, 'FM00') || ' b
WHERE a.date = b.date
AND a.permno = b.permno';
END LOOP;
END
$$
使用to_char()
格式化数字时,请注意前导空格。我使用FM
修饰符来摆脱它。
除此之外:我不会使用date
作为列名,它很容易与基类型或同名函数冲突。