oracle 如何根据一个表中记录的变动更新另外一个表中相应的字段

a表(id,name,telephone,zipcode,address),b表(id,name,telephone,zipcode,address,dept,money) a表中ID与b表中ID是对应的,B表中的name,address....会变动;这时就需要让A表与B表的数据保持一致,只修改变动的记录,不用全表替换,不需要实时变动。
我的意思是B表中的name,address会变动,但是不是所有的都会变动,所以先要查询出变动的部分,然后再和A表比较,再把A表的name,address也更新。备注:不要把没有变动的也更新一遍,这样会影响性能。 是不是要写存储过程才可以实现?

需要实时变动用触发器
不实时变动用update

update a set a.name=(select b.name from b where a.id=b.id),a.adress=(select b.address from b where a.id=b.id)

------补充------
update a set a.name=(select b.name from b where a.id=b.id),a.adress=(select b.address from b where a.id=b.id) where a.name<>b.name or a.address<>b.address
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-19
oracle 如何根据一个表中记录的变动更新另外一个表中相应的字段
可以采取两种方式来实现: 子查询和视图的方式

1:子查询方式
参考代码

update stumarks
set stuname=
(
select stuinfo.stuname from stuname

where stumarks.stuno=stuinfo.stuno
)
2:视图方式
参考代码
update(
select a.stuname anme,b.stuname bname from stuinfo a
inner join stumarks b
ona.stuno=b.stuno

set bname=aname

oracle 如何根据一个表中记录的变动更新另外一个表中相应的字段
需要实时变动用触发器 不实时变动用update update a set a.name=(select b.name from b where a.id=b.id),a.adress=(select b.address from b where a.id=b.id)---补充--- update a set a.name=(select b.name from b where a.id=b.id),a.adress=(select b.address from b wh...

oracle怎么用一个表的多个字段数据更新另一个表相应的字段中
可以用merge语句。merge into 表1 a using 表2 b on (表1和表2的关系,例表1id =表2id)where matched then update set a.要修改的字段1 = b.要修改的字段1,a.要修改的字段2 = b.要修改的字段2,等等 --这里是将表表一的数据和表2做对比,更新条件是两表的id相同,当满足条件时,...

oracle触发器,update一张表时,将update的那一行数据中的部分值更新到...
1、首先创建测试的原表A。2、插入原表A测试数据,执行完SQL后,记得点击commit按钮,否则,数据不会持久化到数据库。3、【创建表结构与数据】此处不需要commit动作。4、【同字段仅数据】。5、【不同字段仅数据】,执行完SQL后,记得点击commit按钮,否则,数据不会持久化到数据库。6、最后效果如下图...

oracle 中用一个表的字段update另一个表的字段值怎么做
oracle 中用一个表的字段update另一个表的字段值怎么做 举例(一对一,tablea所有关联数据全部修改):update tablea set column_name1=(select name2 from tableb where tableb.name3=tablea.name1)只修改一个 update tablea set column_name1=(select name2 from tableb where tableb.name3='a...

在Oracle中怎样用一张表去Update另一张表
1、如果T_USER表中的一个USER_ID在T_NAME_MAP 表中存在两条以上的记录,则该语句会报错。因为Oracle是无法辨别你要“更新”哪一条的。当然,从纯技术的角度来看,这种情况也是可以处理的,你可以在B.NEW_NAME 上加一个函数,如MAX(B.NEW_NAME ).2、WHERE EXISTS 语句绝对不可以省略,有了这个...

oracle 怎么用sql语句把一个表中相应字段的数据复制到另一表中的相应...
你意思是要建立一个中间表维持两表之间的多对多的复杂该系是吧?你试试这个语句:insert into C(a1,b1,a2,b2,) select ... from ...写上你所要关联的数据。一般的需求不会是笛卡尔集是吧。也就是说不可能每个数据都对应完所有数据。

oracle sql更新字段为另一张表的对应字段
where exists (select 1 from table_2 where t1.id=t2.id) and t1.idcard ='1111';之前子查询中的 t1.idcard ='1111' 是多余的。exists子句中的 t1.idcard ='1111'应该拿到外边来。如果这样还是慢的话,那就是你的索引项建的有问题了,需要把两个表中的id作为索引,还有就是idcard也...

oracle查询表A品名字段,更新表B品名字段
可以用一个函数做到,我举一个例子给你看。这相当于你的A表 B1表 利用GROUP_CONCAT这个函数可以把我们查到的多条数据拼接,不过不要忘了加GROUP BY。看如下查询语句的效果:所以不难写出你的update语句 UPDATE score s set s.hobbys=(SELECT b.hobbys from(SELECT a.num, GROUP_CONCAT(a.hobby) ...

Oracle如何从一个表取时间最大值去更新另一个表?
update course set s_data=(select s_date from Student where s_no = 'sooo1'),s_course =( select s_course from Student where s_no = 'sooo1') where s_no = 's0001'

oracle怎么用一个表的多个字段数据更新另一个表相应的字段中
使用触发器

相似回答