建表语句。
create table TABLEB ( ID VARCHAR2(10), TYPENAME VARCHAR2(10) ); create table TABLEA ( ID VARCHAR2(10), TYPEID VARCHAR2(10), NAME VARCHAR2(10) );
insert into tableb (ID, TYPENAME) values ('1', 'type1');
insert into tableb (ID, TYPENAME) values ('2', 'type2');
insert into tableb (ID, TYPENAME) values ('3', 'type3'); insert into tablea (ID, TYPEID, NAME) values ('1', '1', 'name1');
insert into tablea (ID, TYPEID, NAME) values ('2', '2', 'name2' );
insert into tablea (ID, TYPEID, NAME) values ('3', '3', 'name3' );
insert into tablea (ID, TYPEID, NAME) values ('4', '4', 'name4');
根据b表更新a表。部分更新。
解决方案1:update tablea set typeid =
case
when
(select name from tableb where tablea.typeid = tableb.id) is not null then
(select name from tableb where tablea.typeid = tableb.id)
else tablea.typeid
end
解决方案2:
update tablea a set a.typeid = (select typename from tableb where a.typeid = tableb.id)
where exists (select * from tableb where a.typeid=tableb.id)
两种解决方案都能够解决问题。