Bạn đã thử UPDATE .. FROM
không chuẩn của Postgres chưa mệnh đề? Tôi tưởng tượng, điều này sẽ hoạt động
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
Lưu ý rằng tôi đang buộc genid()
được gọi chính xác một lần cho mỗi bản ghi trong mytable
trong phần chọn phụ. Sau đó, tôi đang tự tham gia mytable
và gen
sử dụng id
giả định . Xem tài liệu tại đây:
http://www.postgresql.org/docs/current/interactive /sql-update.html
Tuy nhiên, điều này dường như chỉ được giới thiệu với Postgres 9.0. Nếu điều đó có vẻ quá phức tạp (tức là không dễ đọc lắm), bạn vẫn có thể sử dụng pgplsql với tư cách là người dùng Florin được đề xuất tại đây
.