oracle-多表关联更新
将一个表a的字段aField更新到另一个表b的字段bField上,
两个表通过 a.b_id = b.id 关联
单表更新
UPDATE STUDENTS
SET
EMPLOYEE_ID_FK = '3789' ,
GENDER_CODE = 'F' ,
MARITAL_STATUS_CODE = 'M'
WHERE STUDENT_ID = 11
多表更新
-- 方法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 -- 匹配的时候,更新
多表更新 项目例子
将 budet_project 表中 begin_time 的 年份 更新到 budget_project_detail 表中 的 budget_set_str
注: oracle 多表更新时 不支持 内联操作
left join
-- 20170806:将活动主单 begin_time 的年份 更新到 子单的 budget_set_str
update BUDGET_PROJCET_DETAIL bpd
set bpd.budget_set_str = (
-- 此处 begin_time 是 date 类型字段,需要 用 to_char 转出 字符
-- 或 substr(to_char(bp.begin_time,'yyyy-mm-dd,hh24:mi:ss'),0,4) --将开始时间转成字符串 再对字符串进行截取
select to_char(bp.begin_time,'yyyy') from budget_project bp
where bpd.budget_project_id = bp.id
)
-- 需要加上下面这个 exists 判断,否则 上部分sql执行的结果数量 大于 全部sql执行的结果数量
where exists (
select 1 from budget_project bp
where bpd.budget_project_id = bp.id
)
;