多表联合更新,含有聚合函数

今天遇到一个场景,需要做这么一件事
A 表
其中uid是主键

uidtotal_price
135
266
368

B 表

uidprice
115
128
322
266

要求使用sql来更新A表中的total_price字段,这个字段的值是B表中相同uid的price的总值

update A ,(select uid,sum(price) as total from B group by uid) as bbak set A.total_price=bbak.total
where A.uid=bbak.uid;

 

这是一个多表更新的小例子,只不过在B表中使用到了子查询

update sql总结

转自 http://outofmemory.cn/code-snippet/1337/mysql-duobiao-update-sql-statement-summary

*假定我们有两张表,一张表为Product表存放产品信息,其中有产品价格列Price;另外一张表是ProductPrice表

将ProductPrice表中的价格字段Price更新为Price表中价格字段的80%

A update table1 t1, table2 ts …的方式:

UPDATE product p, productPrice pp
SET pp.price = pp.price * 0.8
WHERE p.productId = pp.productId
AND p.dateCreated < ‘2004-01-01’

B inner join然后更新:

UPDATE product p
INNER JOIN productPrice pp
ON p.productId = pp.productId
SET pp.price = pp.price * 0.8
WHERE p.dateCreated < ‘2004-01-01’

如果ProductPrice表中没有产品价格记录的话,将Product表的isDeleted字段置为1

UPDATE product p
LEFT JOIN productPrice pp
ON p.productId = pp.productId
SET p.deleted = 1
WHERE pp.productId IS 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’

update语句的用法还是很丰富的,慢慢学习吧,并不是说一定要记着所有的sql语句,只要遇到场景能够想到怎么用就行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值