今天遇到一个场景,需要做这么一件事
A 表
其中uid是主键
uid | total_price |
---|---|
1 | 35 |
2 | 66 |
3 | 68 |
B 表
uid | price |
---|---|
1 | 15 |
1 | 28 |
3 | 22 |
2 | 66 |
要求使用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语句,只要遇到场景能够想到怎么用就行