作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有属于 orders
的 items
列表。每个 item
都有 fee_percentage
字段。 items
的总和是orders
表中的total_price
。
我想达到什么目的?我想更新最后关联项目的 fee
字段。
_________________________ __________________________________________
| order ID | total_price| | id | order_id | fee_percentage | fee |
------------------------- ------------------------------------------
| 334 | 425 | | 1 | 334 | 50 | 212 |
# The `fee` should be 213 => | 2 | 334 | 50 | 212 |
如您所见,items
的总和将为 424。我想将剩余的费用添加到最后一项 fee
。 (所以item id 2的费用应该是213)。
有什么帮助吗?
这是我目前写的
UPDATE items AS i
LEFT JOIN orders AS o ON o.order_id = b.order_id
LEFT JOIN (
SELECT order_id, SUM(fee) AS sum_fee
FROM items
GROUP BY order_id
WHERE deleted = 0
) AS b1 ON b1.order_id = b.order_id
SET b.fee = b.fee + (o.total_price - b1.sum_fee)
WHERE b.deleted = 0;
我尝试将其附加到之前的查询或更新订单记录中的 last_item_id,但它不起作用。
LEFT JOIN (
SELECT order_id, MAX(id) AS b_last_item_id
FROM items
WHERE deleted = 0
GROUP BY order_id
) AS b1 ON b1.order_id = b.order_id
最佳答案
这有点棘手。我认为以下查询应该有效:
UPDATE items AS i
JOIN orders AS o ON i.order_id = o.orderID
JOIN (
SELECT order_id, SUM(fee) AS sum_of_fees
FROM items
GROUP BY order_id
) AS i2 ON i2.order_id = o.orderID
LEFT JOIN items AS i3
ON i3.order_id = o.orderID AND i3.id > i.id
SET i.fee = o.total_price - (sum_of_fees - i.fee)
WHERE i3.id IS NULL;
使用的派生表计算每个 order_id
的费用总和。使用这个值,我们可以计算除当前项目之外的所有项目的总和:
SUM(fee) - i.fee
items
表需要一个额外的 LEFT JOIN
来识别具有最大 id
值的记录,即实际上正在更新。
关于mysql - 如何更新最终关联记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41699379/
我是一名优秀的程序员,十分优秀!