Updating a table using joins in Oracle

  1. Scalar sub query
    UPDATE x SET foo = (SELECT y.foo FROM y WHERE y.bar = x.bar);
  2. 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);
  3. 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;
  4. 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

Popular posts from this blog

Configuring DB2 Connect Server

Concatenate files using MS-DOS