2014-01-13 4 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_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 

и заканчивается только один ряд из-за SUM в первом выборе.

+2

Вы просто не хватает 'GROUP BY item_id', не так ли? – Barmar

+0

Как все эти таблицы связаны друг с другом? Почему у вас есть «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 
Смежные вопросы