2014-01-13 24 views
0

例如:我有4個表: 表1:產品MySQL的聯合問題減法

item_id name quantity 
========================== 
1   a  10 
2   b  15 

表2:附加

add_id  name quantity item_id 
=================================== 
1   c  5   1 

表3:item_out(這將減項數量)

item_id quantity 
========================== 
1   10 
2   5 

表4:additional_ou噸(這將減去額外的數量)

additional_id  quantity 
========================== 
1     5   

我的問題是:什麼mysql的查詢,我應該給予這些結果?

item_ id quantity additional_id additinal_quantity 
================================================= 
1   5   1    0 
2   15 

,因爲我喜歡使用MySQL查詢代碼:

SELECT item_id, SUM(quantity - IFNULL(number,0)), additional_id, SUM(additional_quantity - IFNULL(additional_number,0)) 
FROM(
    SELECT a.item_id, a.quantity, b.additional_id, b.quantity AS additional_quantity, NULL AS number, NULL AS additional_number 
    FROM table_1 a JOIN table_2 b ON some condition 
    UNION 
    SELECT NULL AS item_id , NULL AS quantity,... a.quantity AS number, b.quantity AS additional_number 
    FROM table_3 a JOIN table_4 b ON condition 
)AS T 

,並在第一選擇只有1個是因爲SUM的行結束。

+2

你只是缺少'GROUP BY item_id',不是嗎? – Barmar

+0

所有這些表格如何相互關聯?爲什麼在union的第二個查詢中有'NULL AS item_id'?這些數量是從所有項目中減去的嗎? – Barmar

+0

我懷疑你應該使用'LEFT JOIN'和'CROSS JOIN',而不是'UNION'。 – Barmar

回答

0

試試這個:

SELECT item_ id, 
    (item.quantity - IFNULL(item_out.quantity,0)) AS quantity, 
    additional_id, 
    (IFNULL(a.quantity,0) - IFNULL(ao.quantity,0)) AS additional_quantity 
FROM item 
LEFT JOIN item_out 
ON item.item_id = item_out.item_id 
LEFT JOIN additional a 
ON item.item_id = a.item_id 
LEFT JOIN additional_out ao 
ON a.addid = ao.additional_id