Updating a table using joins in Oracle
- Scalar sub query
UPDATE x SET foo = (SELECT y.foo FROM y WHERE y.bar = x.bar);
- Scalar sub query with existential predicate
UPDATE x SET foo = ( SELECT y.foo FROM y WHERE y.bar = x.bar) WHERE EXISTS ( SELECT y.foo FROM y WHERE y.bar = x.bar);
- Updatable view (requires foreign key from x to y)
UPDATE ( SELECT x.foo AS old_foo, y.foo AS new_foo FROM x, y WHERE y.bar = x.bar) SET old_foo = new_foo;
- Merge Update
MERGE INTO x USING (SELECT foo, bar FROM y ) y ON (y.bar = x.bar) WHEN matched THEN UPDATE SET x.foo = y.foo;
Note: WHEN NOT MATCHED construct is optional
Comments