Oracle两表关联更新查询:基于外键匹配更新NAME字段
Oracle 跨表更新语句解决方案
针对你需要依据Table2的匹配记录更新Table1的NAME字段的需求,这里提供两种Oracle环境下的可行写法,都能满足table1.id = table2.fieldId的匹配条件:
方法一:MERGE语句(推荐,逻辑清晰直观)
MERGE是Oracle专门用于批量更新/插入的语句,非常适合这种跨表匹配更新的场景:
MERGE INTO Table1 t1 USING Table2 t2 ON (t1.Id = t2.fieldId) WHEN MATCHED THEN UPDATE SET t1.Name = t2.Name;
方法二:UPDATE结合子查询
如果更习惯传统UPDATE语法,也可以通过关联子查询实现:
UPDATE Table1 t1 SET t1.Name = (SELECT t2.Name FROM Table2 t2 WHERE t1.Id = t2.fieldId) WHERE EXISTS (SELECT 1 FROM Table2 t2 WHERE t1.Id = t2.fieldId);
额外说明
- 两种写法都会仅更新满足匹配条件的记录,不会改动Table1中没有对应Table2 fieldId的行
- 如果Table2中存在多个相同fieldId的记录,方法二会因子查询返回多行报错,这种情况可以给MERGE语句加上
ROW_NUMBER()来筛选唯一匹配项,比如取最新或指定规则的记录,具体可根据你的实际数据情况调整
内容的提问来源于stack exchange,提问作者Ashish Bhavsar
相关产品推荐
相关产品推荐

