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
のレコードごとに1回だけ呼び出されます 副選択内。それから私はmytable
に自己参加しています およびgen
架空のid
を使用する 列。ここのドキュメントを参照してください:
http://www.postgresql.org/docs/current/interactive /sql-update.html
ただし、これはPostgres9.0でのみ導入されたようです。 それが複雑すぎる(つまり、あまり読みにくい)場合でも、ユーザーフローリンはここで提案されました
。