Oracle两表关联更新

本文介绍了三种更新数据库表中数据的方法,包括使用UPDATE语句、内联视图更新和MERGE语句。以T1和T2两个表格为例,展示了如何参照T2表修改T1表中name列内容一致的记录,确保数据同步。这些方法适用于多字段更新和数据同步场景。
摘要由CSDN通过智能技术生成

目录

表结构、测试数据

需求:

方式1:update

方式2:内联视图更新

方式3:merge


表结构、测试数据

drop table t1;
drop table t2;
CREATE TABLE T1 
(
  name VARCHAR2(10) 
, code VARCHAR2(10) 
);
ALTER TABLE t1 ADD PRIMARY KEY(name);
insert into t1 (name,code) values('lw01','01');
insert into t1 (name,code) values('lw02','02');

CREATE TABLE T2
(
  name VARCHAR2(10) 
, code VARCHAR2(10) 
);
ALTER TABLE t2 ADD PRIMARY KEY(name);
insert into t2 (name,code) values('lw03','03');
insert into t2 (name,code) values('lw02','lw02');
insert into t2 (name,code) values('lw01','lw01');

drop table t1;
drop table t2;
CREATE TABLE T1 
(
  name VARCHAR2(10) 
, code VARCHAR2(10) 
);
ALTER TABLE t1 ADD PRIMARY KEY(name);
insert into t1 (name,code) values('lw01','01');
insert into t1 (name,code) values('lw02','02');

CREATE TABLE T2
(
  name VARCHAR2(10) 
, code VARCHAR2(10) 
);
ALTER TABLE t2 ADD PRIMARY KEY(name);
insert into t2 (name,code) values('lw03','03');
insert into t2 (name,code) values('lw02','lw02');
insert into t2 (name,code) values('lw01','lw01');

需求:

参照T2表,修改T1表,修改条件为两表的name列内容一致。

方式1:update

UPDATE T1 t1
   SET t1.code =
       (select t2.code from T2 t2 where t2.name = t1.name)
 WHERE EXISTS (SELECT 1 FROM T2 t2 WHERE t2.name = t1.name);

UPDATE T1 t1
   SET t1.code =
       (select t2.code from T2 t2 where t2.name = t1.name)
 WHERE EXISTS (SELECT 1 FROM T2 t2 WHERE t2.name = t1.name);

如果同时更新多个字段可以参照以下语法: 

UPDATE DEMO_T1 t1
SET (字段一,字段二,...) = (select 字段一,字段二,... from DEMO_T2 T2 where T2.FNAME = T1.FNAME)
WHERE EXISTS(SELECT 1 FROM DEMO_T2 T2 WHERE T2.FNAME = T1.FNAME);

UPDATE DEMO_T1 t1
SET (字段一,字段二,...) = (select 字段一,字段二,... from DEMO_T2 T2 where T2.FNAME = T1.FNAME)
WHERE EXISTS(SELECT 1 FROM DEMO_T2 T2 WHERE T2.FNAME = T1.FNAME);

方式2:内联视图更新

注意:需要取数据的表,该字段必是主键或者有唯一约束

UPDATE (select t1.code code1, t2.code code2
          from t1 t1, t2 t2
         where t1.name = t2.name) t
   set code1 = code2;

UPDATE (select t1.code code1, t2.code code2
          from t1 t1, t2 t2
         where t1.name = t2.name) t
   set code1 = code2;

方式3:merge

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天代码码天天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值