JOIN результатов двух подзапросов с таблицей в основном запросе - MySQL

Узнай цену своей работы

Формулировка задачи:

Есть такие таблицы: • товар: товар_id, наименование_товара • ЦН: ЦН_id (primary), дата_сдачи • СЦН: ЦН_id, товар_id, количество • ТТН: ТТН_id (primary), дата_отправки • СТТН: ТТН_id, товар_id, количество Тут ПП (платёжные поручения) указывают отправленый заказчику товар. ЦН (цеховые накладные) — товар произведённый. Надо получить остатки товара на заданную дату, т.е. таблицу наименование_товара | остаток_на_складе В первом подзапросе я получал товар_id | всего_сдано Во втором товар_id | всего_отправлено В главном запросе пытался сделать так:
SELECT наименование_товара, (всего_сдано) - (всего_отправлено) AS остаток_на_складе
FROM товар JOIN
(
  (--первый подзапрос
    SELECT СЦН.товар_id, SUM(СЦН.количество) AS всего_сдано
    FROM СЦН JOIN ЦН ON СЦН.ЦН_id = ЦН.ЦН_id
    WHERE ЦН.дата_сдачи<=CURDATE() GROUP BY СЦН.товар_id
  )
  JOIN 
  (--второй подзапрос
    SELECT СТТН.товар_id, SUM(СТТН.количество) AS всего_отправлено
    FROM СТТН JOIN ТТН ON СТТН.ТТН_id = ТТН.ТТН_id
    WHERE ТТН.дата_отправки<=CURDATE() GROUP BY СТТН.товар_id
  )
  ON СЦН.товар_id = ТТН.товар_id
)
ON товар.товар_id = СЦН.товар_id
HAVING остаток_на_складе>0
Но SQL ругается на конструкцию JOIN'ов между подзапросами. Так как объединить результаты подзапросов в главном запросе? Или может есть способ сделать всё иначе/проще?

Решение задачи: «JOIN результатов двух подзапросов с таблицей в основном запросе»

textual
Листинг программы
SELECT product.product_name, (ifnull(SUM(scn.quantity),0) - ifnull(SUM(sttn.quantity),0)) AS have
FROM product LEFT JOIN
(
    (scn JOIN cn ON scn.CN_id=cn.CN_id)
    LEFT JOIN
    (sttn JOIN ttn ON sttn.TTN_id=ttn.TTN_id)
    ON scn.product_id = sttn.product_id
)
ON product.product_id = scn.product_id  
GROUP BY product.product_name
HAVING have>0

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.6 из 5
Похожие ответы