您是否尝试过Postgres的非标准UPDATE .. FROM
条款?我想这会起作用
update mytable
set a = first_part(gen.id),
b = second_part(gen.id),
c = third_path(gen.id)
from (
select genid() as genid, id
from mytable
where package_id = 10
) gen
where mytable.id = gen.id;
--and package_id = 10 -- This predicate is no longer necessary as the subquery
-- already filters on package_id, as Erwin mentioned
请注意,我强制在子选择内genid()
每个记录仅被调用一次mytable
。然后,我将自我加入mytable
并gen
使用一个假设的id
专栏。请参阅此处的文档:
http://www.postgresql.org/docs/current/interactive/sql- update.html