Thread: UPDATE .. JOIN?
Hi. I was wondering if I could do something similar to this in Postgres and if yes how? UPDATE table1 SET blah = 1 FROM table1 INNER JOIN table2 ON table1.id = table2.t1id If not, is there any way to make UPDATE ... WHERE id IN (....) use indexes?
On Jan 12, 2008 5:22 PM, Sergei Shelukhin <realgeek@gmail.com> wrote: > Hi. > > I was wondering if I could do something similar to this in Postgres and > if yes how? > > UPDATE table1 SET blah = 1 FROM table1 > INNER JOIN table2 ON table1.id = table2.t1id UPDATE table1 t1 SET blah = 1 FROM table2 t2 WHERE t1.id = t2.t1id > If not, is there any way to make UPDATE ... WHERE id IN (....) use indexes? It depends. Read the docs: http://www.postgresql.org/docs/8.2/static/using-explain.html http://www.postgresql.org/docs/8.2/static/planner-stats.html http://www.postgresql.org/docs/8.2/static/planner-stats-details.html
Rodrigo E. De León Plicet wrote: > On Jan 12, 2008 5:22 PM, Sergei Shelukhin <realgeek@gmail.com> wrote: > >> Hi. >> >> I was wondering if I could do something similar to this in Postgres and >> if yes how? >> >> UPDATE table1 SET blah = 1 FROM table1 >> INNER JOIN table2 ON table1.id = table2.t1id >> > > UPDATE table1 t1 > SET blah = 1 > FROM table2 t2 > WHERE t1.id = t2.t1id > > Hmmm. What if there's more than one table? Is "from x,y" a viable option?
On Jan 12, 2008 11:26 PM, Sergei Shelukhin <realgeek@gmail.com> wrote: > Hmmm. What if there's more than one table? Is "from x,y" a viable option? UPDATE table1 t1 SET blah = 1 FROM ( SELECT t2.t1id FROM table2 t2 JOIN table3 t3 ON t2.id = t3.t2id ) foobar WHERE t1.id = foobar.t1id It's all in the docs: http://www.postgresql.org/docs/8.2/static/sql-update.html Good luck.
On Jan 13, 2008 12:05 AM, I said > It's all in the docs: > http://www.postgresql.org/docs/8.2/static/sql-update.html To clarify, you can use the direct form, without using a subselect: UPDATE table1 t1 SET blah = 1 FROM table2 t2 JOIN table3 t3 ON t2.id = t3.t2id WHERE t1.id = t2.t1id Lookup "fromlist" (without the quotes) on the quoted link. Regards.
Re: Updating a table with joins I have been trying to achieve the same thing for quite a period of months but could not get the right query, finally now i am sorted, this one works like a charm for me. ======================================== Replace the tables on this query with joined tables Update service_reminderschedule srs set reminder_sent = false from ( select ss.fk_man_service_id, ss.serviceschedule_id, v.vehicle_id from serviceschedule ss inner join manufactureservices ms on ms.man_service_id = ss.fk_man_service_id inner join vehicle_model vm on vm.model_id = ms.fk_vehicle_model_id inner join vehicle_info v on v.fk_vehicle_model_id = vm.model_id where ms.fk_vehicle_model_id = 1) ss where ss.vehicle_id = srs.fk_vehicle_id and srs.fk_serviceschedule_id = ss.serviceschedule_id and srs.date_sent is null; -- View this message in context: http://postgresql.1045698.n5.nabble.com/UPDATE-JOIN-tp1895125p5751783.html Sent from the PostgreSQL - general mailing list archive at Nabble.com.
Replace the tables on this query with your joined tables Update service_reminderschedule srs set reminder_sent = false from ( select ss.fk_man_service_id, ss.serviceschedule_id, v.vehicle_id from serviceschedule ss inner join manufactureservices ms on ms.man_service_id = ss.fk_man_service_id inner join vehicle_model vm on vm.model_id = ms.fk_vehicle_model_id inner join vehicle_info v on v.fk_vehicle_model_id = vm.model_id where ms.fk_vehicle_model_id = 1) ss where ss.vehicle_id = srs.fk_vehicle_id and srs.fk_serviceschedule_id = ss.serviceschedule_id and srs.date_sent is null; -- View this message in context: http://postgresql.1045698.n5.nabble.com/UPDATE-JOIN-tp1895125p5751790.html Sent from the PostgreSQL - general mailing list archive at Nabble.com.