MySQL выборка с 3-х таблиц с группировкой

программирование MySQL базы данных sql

Есть запрос с джойном:

Есть таблицы:
stuff: (товары)
id|name

orders: (заказанные товары)
id|stuff_id|count

и stock (пополнение складов):
id|stuff_id|count

есть запрос, выбирающий сколько уже заказано товара, и какого товара. Нужно подключить таблицу stock, чтобы из суммы полей SUM(stock.count) при группировке по count.stuff_id вычитать имеющуюся у меня сумму SUM(orders.count). Дело в том, что я не знаю как подключить третью таблицу к запросу (stock) и получить разницу сумм полей.

В двух словах для ясности:

я делаю запрос

SELECT
stuff.id,
stuff.title,
orders.stuff_id,
SUM(orders.count)
FROM stuff
INNER JOIN orders
ON orders.stuff_id = stuff.id
GROUP BY orders.stuff_id

и получаю:
(id) (stuff.title) (stuff_id) (SUM(orders.count))
1 товар1 1 12
2 товар2 2 3


а нужно мне получить:
(id) (stuff.title) (stuff_id) (SUM(orders.count)) (SUM(stock.count))
1 товар1 1 12 42
2 товар2 2 3 15


то бишь я хочу получить список свободного остатка товаров, поступивших на склады, но не учавствующего пока ни в одном заказе.
Ответы:
select
   stuff.id,
   stuff.name,
   orders_g.count as ordered,
   stock_g.count as in_stock,
   stock_g.count-orders_g.count as left_unordered
from
   stuff left join
   (
       select
           stuff_id,
           sum(count) as count
       from orders
       group by stuff_id
   ) as orders_g on orders_g.stuff_id=stuff.id left join
   (
       select
           stuff_id,
           sum(count) as count
       from stock
       group by stuff_id
   ) as stock_g on stock_g.stuff_id=stuff.id


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.