我正在运行 Postgres 9.1 并且有一个主表 (returns.msf_mse
),其中包含 30 个空列和 30 个额外的临时表 (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
。
最佳答案
你可以使用 DO
语句 (pg 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
作为列名,它很容易与基类型或同名函数冲突。
关于function - 循环以从 postgres 中的不同表运行多个更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21586752/