2013-07-15 39 views
1

我正在嘗試使用另一個表中的sum語句的結果更新單個表上的字段。爲了得到結果,我必須將兩個表格結合在一起,並在這兩個表格之一中總結一個數量字段。然後我需要將總和的數量設置爲第三個表格中的一個字段。我已經四處尋找解決方案,並找到了一些答案,但他們不是超級詳細的答案,我一直無法爲我的情況。通過MySQL聚合查詢執行更新

我覺得我相當接近解決方案,但我目前的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

的命名約定,如這將在相當不久的將來,開車送你完全瘋了。 – Strawberry

+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`;