проблемы объединения mysql с вычитанием

например: у меня есть 4 таблицы: таблица 1 : элемент

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_out (это вычтет дополнительное количество)

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 в первом выборе.


person user3106988    schedule 13.01.2014    source источник
comment
Вам просто не хватает GROUP BY item_id, не так ли?   -  person Barmar    schedule 13.01.2014
comment
Как все эти таблицы связаны друг с другом? Почему у вас NULL AS item_id во втором запросе объединения? Эти количества вычитаются из всех предметов?   -  person Barmar    schedule 13.01.2014
comment
Я подозреваю, что вы должны использовать LEFT JOIN и CROSS JOIN, а не UNION.   -  person Barmar    schedule 13.01.2014
comment
@Barmar удивительно работает с добавлением GROUP BY! Спасибо чувак!!   -  person user3106988    schedule 13.01.2014


Ответы (1)


Попробуй это:

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
person Aziz Shaikh    schedule 13.01.2014