mysql - 如何更新连接值总和的字段?

标签 mysql sql sql-update

我有三张 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/

相关文章:

mysql - 如何向复杂的 select 语句添加条件

mysql - 选择给定多行的值

mysql - 蛋糕PHP : populating 2 fields with the same foreign key and write to database

SQL UPDATE TOP () 或使用 SELECT TOP 进行更新

mysql - 使用选择子查询将列更新到同一个表

sql - 使用 dblink 无法在 2 个数据库之间更新

php - 从 MYSQL 表中选择所有字段的性能影响

python - 使用 Python 将大型 CSV 文件导入 MySQL

mysql - MYSQL中自动递增的列

php - 从存储过程中获取第二个记录集