Oracle 关联两表写update语句

两种方法:


-- 方法1.
UPDATE 表2
SET
表2.C = (SELECT B FROM 表1 WHERE 表1.A = 表2.A)
WHERE
EXISTS ( SELECT 1 FROM 表1 WHERE 表1.A = 表2.A)


-- 方法2
MERGE INTO 表2
USING 表1
ON ( 表2.A = 表1.A ) -- 条件是 A 相同
WHEN MATCHED THEN UPDATE SET 表2.C = 表1.B -- 匹配的时候,更新

eg
update c_mp mp set mp.mp_no =(SELECT t3.f1 FROM qw_dr_temp t3 WHERE t3.f4 = mp.mp_id)
WHERE EXISTS ( SELECT t4.f1 FROM qw_dr_temp t4 where t4.f4 =mp.mp_id)
### Oracle 中带有关联UPDATE 语句法 在 Oracle 数据库中,执行多关联更新操作时,不能像 MySQL 那样直接使用 `JOIN` 语法进行更新。Oracle 提供了基于子查询的更新方式,或者通过将多个连接后作为更新的数据源来实现。 一种常见的法是使用内联视图(Inline View)配合 `UPDATE` 语句进行更新操作。例如: ```sql UPDATE ( SELECT a.last_update_time, b.update_time AS new_time FROM table_a a JOIN table_b b ON a.task_key = b.task_key ) t SET t.last_update_time = t.new_time; ``` 这种方式通过创建一个包含连接结果的临时视图,并在这个视图上执行更新操作,从而实现对目标字段的修改[^1]。 如果需要进一步限制更新的范围,可以在 `SELECT` 子句中加入额外的过滤条件。例如,仅更新 `table_b` 中状态为 `'active'` 的记录: ```sql UPDATE ( SELECT a.last_update_time, b.update_time AS new_time FROM table_a a JOIN table_b b ON a.task_key = b.task_key WHERE b.status = 'active' ) t SET t.last_update_time = t.new_time; ``` 此外,Oracle 还支持另一种形式的更新语法,即将多个连接的结果作为更新数据源的一部分。例如,在某些特定场景下可以使用如下法: ```sql UPDATE ( SELECT * FROM employees e JOIN jobs j ON e.job_id = j.job_id WHERE e.employee_id = 100 ) SET min_salary = salary; ``` 该语句示从 `employees` 和 `jobs` 的连接结果中选取符合条件的记录,并对其中的 `min_salary` 字段进行赋值更新[^2]。 需要注意的是,Oracle 对于更新操作的事务控制较为严格,因此在实际执行前应确保语句逻辑正确且不会引发意外锁或性能问题。同时,建议在正式运行前先进行小规模测试以验证语句的有效性。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值