暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

三种数据库多表关联更新的语句比较

数据库精要 2021-09-27
1132


数据库中经常使用多表关联更新功能,但是三种数据库的多表关联更新语法差异较大,不注意会出现更新不成功,或者更新为错误数据。

oracle:

两表(多表)关联update -- 被修改值由另一个表运算而来

-- 

update tablea a -- 使用别名

set (c1,c2)=(select b.c1,b.c2

from tableb b

where b.id=a.id)

where exists (select 1

from tableb b

where b.id=a.id

);

注意如果不添加后面的exists语句,TA关联不到的行c1, c2栏位将被更新为NULL值, 如果c1, c2字段不允许为null,则报错。 这不是我们希望看到的。

oracle 还可以用 merge语法进行更新,关于merge多表更新的写法请扫描下方二维码码移步知识星球继续学习。

sqlserver:

update tablea set ca = b.ca,cb = b.cb

from tablea ta ,tableb tb 

where a.id = b.id;

sqlserver的update后面是不能跟多表的,但需要跟在from子句后面;

mysql:

  

UPDATE tableA a

 , tableB b SET a.a1 = b.b1 , a.a2 = b.b2 WHERE a.a3 = b.b3;

上面的例子都是两张表之间做关联,但是只更新一张表中的记录,其实是可以同时更新两张表的字段,即关联更新支持更新两个表的字段 

UPDATE tablea a  

INNER JOIN tableb b

ON a.Id = b.Id 

SET a.price = a.price * 0.8, 

b.dateUpdate = CURDATE() 

WHERE b.dateCreated < '2004-01-01' 

两张表做关联,更新了a表的price字段和b表字段的dateUpdate两个字段。

想学习更多,请扫描下方二维码,移步知识星球


文章转载自数据库精要,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论