MYSQL多表更新

本文介绍了在MySQL中如何进行多表更新。由于insert, update, delete操作仅能对单表执行,故可通过连接查询生成临时表来实现跨表更新。讲解了on和where在不同连接查询中的使用区别,以及在outer join中筛选条件的放置位置。最后说明,多表更新并不违背单表操作原则,可将连接后的表视为临时表进行操作。" 91452217,8447322,Python3并发编程:concurrent.futures详解,"['Python', '并发', '多线程', '多进程', '并行计算']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先明白,insert,update,delete只能对单表

那么,要跨表更新怎么办呢,先通过连接(左连接,右连接,内连接)的方式生成临时表,对临时表进行操作

将下面括号内看成一张临时表

update (a left join b on a.id = b.a_id)
set expression = "a"  
where b.measure_type='yx'

或者

update a,b
set expression = "a"  
where (b.measure_type='yx' and a.id = b.a_id);

逗号连接,其实是内连接的简写 ,即 逗号 == inner join

outer join时,不要将where条件写入on中,如

update (a left join b on (a.id = b.a_id and b.measure_type='yx'))
set expression = "a"  

on && where

sql中的连接查询分为3种, cross join,inner join,和outer join ,  在 cross join和inner join中,筛选条件放在on后面还是where后面是没区别的,极端一点,在编写这两种连接查询的时候,只用on不使用where也没有什么问题。因此,on筛选和where筛选的差别只是针对outer join,也就是平时最常使用的left join和right join

outer join相对于inner join的一个主要特性就是以一侧的表为基础,所以,侧表的measure_type属性到临时表时值为null。

多表更新

UPDATE (product p 
INNER JOIN productPrice pp 
ON p.productId = pp.productId) 
SET pp.price = pp.price * 0.8, 
p.dateUpdate = CURDATE() 
WHERE p.dateCreated < '2004-01-01' 

上面的操作,能对俩张表进行更新,那是不是就意味着,刚开始说的只能对单表操作抵触了呢,并不是。

括号内看成一张临时表,俩张表进行了连接之后,p与pp都可以看作临时表的引用,只是多了个引用罢了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值