我正在尝试使用另一个表中的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`;
答案 0 :(得分: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`;