使用场景:
两张数据表之间存在关联关系,使用一张表的字段去批量更新另外一张表中某列字段。
以下示例中,t1表与t2表通过f1字段关联,需要使用t1表的f2字段批量更新t2表中的f2字段。
--创建数据表t1,含3个字段:f1,f2,f3
create table t1 (f1 varchar(10), f2 varchar(10), f3 varchar(10));
select * from t1;
--为数据表t1初始化3条数据
insert into t1 (f1, f2, f3) values ('101', '201', '301');
insert into t1 (f1, f2, f3) values ('102', '202', '302');
insert into t1 (f1, f2, f3) values ('103', '203', '303');
--创建数据表t2,含3个字段:f1,f2,f4
create table t2 (f1 varchar(10), f2 varchar(10), f4 varchar(10));
--drop table t2;
select * from t2;
--为数据表t2初始化3条数据
insert into t2 (f1, f2, f4) values ('101', '', '401');
insert into t2 (f1, f2, f4) values ('102', '', '402');
insert into t2 (f1, f2, f4) values ('103', '', '403');
--更新t2的f2字段值为空
update t2 set f2 = '';
select * from t2;
--使用t1表的f2字段更新t2表的f2字段
--t1表与t2表通过f1字段进行关联
update t2 set t2.f2 = (
select t1.f2 from t1 where t1.f1 = t2.f1
)
where (t2.f2 is null or t2.f2 = '') --条件,t2表的f2字段为空
and exists (
select 1 from t1 where t1.f1 = t2.f1); --注意加上该条件,确保脚本内部循环的准确性