1

我正在尝试使用另一个表中 sum 语句的结果更新单个表上的字段。为了得到结果,我必须将两个表绑定在一起,并在这两个表之一中求和一个 qty 字段。然后我需要将总数量设置为第三个表中的一个字段。我四处寻找解决方案,并找到了一些答案,但它们不是非常详细的答案,我无法使其适合我的情况。

我想我已经很接近解决方案了,但是我当前的 MySQL 查询无法运行。它告诉我“每个派生表都必须有自己的别名”。这是我的代码:

UPDATE `t inventory` i INNER JOIN
(SELECT Sum(p.Qty) AS SumOfQty, p.Category AS Category, p.StockNu AS StockNu
FROM `t purchorderitems` p INNER JOIN `t jobenv` j ON p.`Order Nu` = j.`Auto Number`)
WHERE ((p.PickedUp) Is Null AND (j.`Date In`) Is Null AND (p.StockItem)='Yes' AND p.Return=0 AND p.TradeIn=0 AND ((`Locked`) Is Null Or `TransType`='LW'))
Group By p.Category, p.StockNu) x ON (x.StockNu = i.STOCKNO) AND (x.Category = i.ABR)
SET i.NumHld = x.`SumOfQty`;
4

1 回答 1

1

在写这个问题的过程中,我设法找到了解决自己问题的方法。我确实非常接近让查询工作。显然,我唯一错的是在j.`Auto Number`. 我删除了括号,现在代码运行良好。

由于我设法找出了自己的问题,因此我考虑过不发布,但是由于在搜索此问题时很难找到答案,所以我想我不妨发布我的问题及其答案。

这是成功的代码:

UPDATE `t inventory1` i INNER JOIN
(SELECT Sum(p.Qty) AS SumOfQty, p.Category AS Category, p.StockNu AS StockNu
FROM `t purchorderitems` p INNER JOIN `t jobenv` j ON p.`Order Nu` = j.`Auto Number`
WHERE ((p.PickedUp) Is Null AND (j.`Date In`) Is Null AND (p.StockItem)='Yes' AND p.Return=0 AND p.TradeIn=0 AND ((`Locked`) Is Null Or `TransType`='LW'))
Group By p.Category, p.StockNu) x ON (x.StockNu = i.STOCKNO) AND (x.Category = i.ABR)
SET i.NumHld = x.`SumOfQty`;
于 2013-07-15T18:37:46.687 回答