Heb je Postgres' niet-standaard UPDATE .. FROM
. geprobeerd? clausule? Ik kan me voorstellen dat dit zou werken
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
Merk op dat ik genid()
. forceer precies één keer per record worden aangeroepen in mytable
binnen de subselectie. Dan sluit ik me aan bij mytable
en gen
met behulp van een hypothetische id
column.Bekijk hier de documentatie:
http://www.postgresql.org/docs/current/interactive /sql-update.html
Dit lijkt echter alleen met Postgres 9.0 te zijn geïntroduceerd. Als dat te ingewikkeld lijkt (d.w.z. niet erg leesbaar), kun je nog steeds je toevlucht nemen tot pgplsql als gebruiker Florin stelde hier voor
.