yoy.be "Why-o-Why"

PostgreSQL: update set from (join)*

2019-03-05 15:56  updatefrom  coding werk  [permalink]

In SQLServer schreef ik wel eens een query van de vorm:

update MyTable set Field1='Value1',Field2=3
from MyTable T1
inner join SomeOtherTable T2 on T2.Field3=T1.Field3
--eventueel nog joins
where T1.Field1='Value0'

Maar dan probeer je hetzelfde te doen in SQLite: noppes

Of in PostgreSQL, daar blijkt het wel te bestaan maar hij plakt de referentie naar de tabel van de update niet aan het gebruik van de tabel in je from of join. Omdat je zo dan eigenlijk geen velden van de tabel in de where hebt staan, doet hij de update op alle records, ongeacht je selectie. Maar dat is gemakkelijk op te lossen natuurlijk:

update MyTable set Field1='Value1',Field2=3
from MyTable T1
inner join SomeOtherTable T2 on T2.Field3=T1.Field3
where MyTable.MyPrimaryKeyField=T1.MyPrimaryKeyField --in de veronderstelling dat dit je primary key veld is natuurlijk
and T1.Field1='Value0'

Maar daar moet je dus wel zelf aan denken, lastig als je het anders gewoon was...

twitter reddit linkedin facebook