Oracle两(多)表关联更新操作
在实际项目中经常会碰到一个表的数据update依赖其它表数据的情况,在此记录一下操作的方法。
方式一:update…set…where exists…
例如现在有两个表:客户表(customers)和vip客户表(cust_city)。
第一种情况:被update的值是固定的,仅在where条件句中有关联。
1 | update customers a |
第二种情况:被update的值由另一个表中的数据运算而来。
update一列的情况:
1 | update customers a |
注意事项
上面的 where exists 的语句是不能省略的,否则会导致一些没有匹配的行会被更新成null值。
举个例子,有如下T1和T2两张表。
1 | select * from T1; |

1 | select * from T2; |

现需求:参照T2表,修改T1表,修改条件为两表的fname列内容一致。如果没有加 where exxits 语句,执行如下update语句。
1 | UPDATE T1 |
得到T1表的结果是:
有一行原有值,被更新成空值了。
所以正确的写法应该是:
1 | UPDATE T1 |
验证更新后T1的数据:
方式二:merge into…when matched…
还是对于上面t1,t2两张表做联表更新,merge语句的使用方式如下:
1 | merge into t1 |
------ 本文完 ------