为了解释这个问题,我刚才概述了一个示例情况。
OrderRows
ID|OrderNumber|ProductNumber|Quantity|Done
1 |10 |100 |1 |no*
2 |10 |101 |1 |no
3 |10 |100 |4 |no*
*具有相同的产品编号
Stock
ProductNumber|Quantity
100 |5
101 |1
UPDATE OrderRows
INNER JOIN Stock ON Stock.ProductNumber=OrderRows.ProductNumber
SET Done='yes'
,Stock. Quantity = Stock. Quantity -OrderRows. Quantity
WHERE OrderNumber='100' AND Done='no'
表Stock
的结果如下所示。
ProductNumber|Quantity
100 |4
101 |0
订单行已正确更新。但对于Order Row三,Stock不适应。这是因为订单行3与订单行1具有相同的产品编号。问题是,我该如何解决这个问题?
答案 0 :(得分:0)
您需要在此处使用GROUP BY
。但是我们不能直接使用它。所以你可以使用这样的子查询来实现这个目的:
UPDATE OrderRows o
JOIN Stock s
ON s.ProductNumber = o.ProductNumber
JOIN
(
SELECT ProductNumber, SUM(Quantity) AS Quantity
FROM OrderRows
WHERE Done = 'no'
GROUP BY ProductNumber
) o1
ON o.ProductNumber = o1.ProductNumber
SET o.Done = 'Yes'
,s.Quantity = s.Quantity - o1.Quantity
WHERE o.Done = 'no';
更新后的表格:
OrderRows
| ID | ORDERNUMBER | PRODUCTNUMBER | QUANTITY | DONE |
------------------------------------------------------
| 1 | 10 | 100 | 1 | Yes |
| 2 | 10 | 101 | 1 | Yes |
| 3 | 10 | 100 | 4 | Yes |
股票
| PRODUCTNUMBER | QUANTITY |
----------------------------
| 100 | 0 |
| 101 | 0 |