一、根据查询到的结果更新一列数据
update A set A.name = (select B.name from B where A.id_no = B.id); -- A表的 id_no和B表的 id作为A表和B表的关联,确保A表中对应的 id_no只有一个name值需要更新
二、根据查询到的结果更新多列数据
1、通过相关子查询
update A set (A.name , A.score) = (select B.name , B.score from B where A.id_no = B.id); -- 这里的理解和更新一列数据的SQL是相同的。
-- 按照更新一列的逻辑和Oracle常用的多个数据更新习惯,应该是有几个属性需要更新就有几个对应的子查询,例如:
update A set A.name = (select B.name from B where A.id_no = B.id) ,A.score= (select B.score from B where A.id_no = B.id); -- 上面的SQL相当于对同一张表获取的数据做了一个简写
2、通过内联视图
update ( select A.id_no Aid_no , A.name Aname, A.score Ascore, B.id Bid, B.name Bname, B.score Bscore from A inner join B on (A.id_no = B.id) ) set Aname = Bname, Ascore = Bscore;
参考信息:https://www.linuxidc.com/Linux/2014-06/103552.htm、https://blog.csdn.net/lunshu2b/article/details/80255088、https://bbs.csdn.net/topics/340196496
https://blog.csdn.net/weixin_34293902/article/details/86261897