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