2016-08-24 29 views
0

我有這樣使用表循環從SQL查詢

SparePart

+-------------+------------------------+--------+---------+ 
| sparePartID | name     | price | modelID | 
+-------------+------------------------+--------+---------+ 
| 12V   | Preheat Start Relay | 1470 | WADR40E | 
| 12V.  | Instrument Assembly | 1290 | WADR40E | 
| 12V..  | Motor Module(360)  | 17810 | WADR40E | 
| 40CC  | HST Assembly   | 264840 | WADR40E | 
| 4L88  | Oil Filter Core  | 1200 | WADR40E | 
| 4L88.  | Diesel oil Filter Core | 260 | WADR40E | 
| 4SB1490  | Belt     | 9930 | WADR40E | 
| 50*2.65  | Axeal -O Ring   |  80 | WADR40E | 
| 60*85*10 | Oil seal    | 1180 | WADR40E | 
| 9J-5-1605 | Joint Belt    | 8960 | WADR40E | 
+-------------+------------------------+--------+---------+ 

和MainStock

+-------------+-----+------------+-------------+ 
| originalQty | qty | shipmentID | sparePartID | 
+-------------+-----+------------+-------------+ 
|   20 | 20 | RnsttFOY | RT125-03001 | 
|   10 | 10 | SHPMT78 | RT125-03001 | 
|   8 | 8 | RH987ho | 12V   | 
|   0 | 0 | RH987ho | 4SB1490  | 
+-------------+-----+------------+-------------+ 

於是我就用這樣的查詢計算所有股票的表來自所有貨物

SELECT SUM(`qty`) FROM MainStock WHERE sparePartID='RT125-03001'; 

我想從SparePart表中循環遍歷每個sparePartID並獲取表結果。我嘗試過這樣的事情。

SELECT SUM(`qty`) 
    -> FROM MainStock, SparePart 
    -> WHERE sparePartID=SparePart.sparePartID; 

但我得到一個消息,說

ERROR 1052 (23000): Column 'sparePartID' in where clause is ambiguous 

所以,我怎麼能做到這一點?

+0

所需的結果集的樣本將有助於 – Lamak

+0

你想列出了所有的sparePartID其給定的總和('數量')? – Moptan

+0

你得到這條消息的原因是因爲你沒有告訴查詢*哪個*表'sparePartID'來自(將其更改爲'MainStock.SparePartID = SparePart.sparePartID')。但是這並不能幫助你達到預期的結果。你能告訴我們你期望結果集看起來像什麼嗎? – Siyual

回答

3

你真的不需要一個循環,只是一個簡單的加入和GROUP BY

SELECT SP.sparePartID, SUM(qty) as qty 
FROM SparePart SP 
LEFT JOIN MainStock MS 
    ON SP.sparePartID = MS.sparePartID 
GROUP BY SP.sparePartID 
1

你要表的名稱添加到每個列或更好地利用別名爲你的表:

SELECT SUM(`qty`) 
    FROM MainStock ms, SparePart sp 
    WHERE ms.sparePartID=sp.sparePartID; 
    Group by sp.sparePartID 
0

,因爲這兩個表包含列sparePartId你得到錯誤。所以讓我們給出表名也是爲了避免含糊不清。

SELECT Mainstock.sparePartId, SUM(`qty`) 
FROM MainStock, SparePart 
WHERE Mainstock.sparePartID=SparePart.sparePartID; 
+0

不只是發佈代碼。解釋你的答案。 – Jens

+0

這隻能解決他的錯誤,並不能回答他的問題。 – Siyual