我有三张 table 。餐 table 市场包含所有元素及其价格。表 users 包含所有用户及其余额的列表。购买表包含已售商品的 ID 和买家的 ID 列表。我需要减去用户在商品上花费的价格。当我进行此查询时
`UPDATE market m
JOIN bought b ON m.id=b.id AND m.status="need"
JOIN users u ON u.id=b.buyer
SET m.status="sold", m.date=CURRENT_TIMESTAMP, u.balance = u.balance - m.price`
余额仅根据一线市场值(value)更新。我如何减去所有价格?
//===========
用户
ID余额
1100
//===========
市场
价格
1 1
2 2
3 3
//===========
已购买
买家 ID
1 1
3 1
最佳答案
这是您的查询:
UPDATE market m JOIN
bought b
ON m.id = b.id AND m.status = 'need' JOIN
users u
ON u.id=b.buyer
SET m.status = 'returned',
m.date = CURRENT_TIMESTAMP,
u.balance = u.balance - m.price;
当多行匹配时,会任意选择一行进行更新。更新不会累积。您可以得到您想要的,但是您需要两个更新,其中一个带有聚合:
UPDATE users u JOIN
(select b.buyer, sum(price) as sumprice
from market m JOIN
bought b
ON m.id = b.id AND m.status = 'need'
) mb
ON u.id = b.buyer
SET u.balance = u.balance - m.price;
UPDATE market m JOIN
bought b
ON m.id = b.id AND m.status = 'need'
SET m.status = 'returned',
m.date = CURRENT_TIMESTAMP;
关于mysql - 如何更新连接值总和的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25096062/