JOIN результатов двух подзапросов с таблицей в основном запросе - MySQL
Формулировка задачи:
Есть такие таблицы:
• товар: товар_id, наименование_товара
• ЦН: ЦН_id (primary), дата_сдачи
• СЦН: ЦН_id, товар_id, количество
• ТТН: ТТН_id (primary), дата_отправки
• СТТН: ТТН_id, товар_id, количество
Тут ПП (платёжные поручения) указывают отправленый заказчику товар. ЦН (цеховые накладные) — товар произведённый.
Надо получить остатки товара на заданную дату, т.е. таблицу
наименование_товара | остаток_на_складе
В первом подзапросе я получал
товар_id | всего_сдано
Во втором
товар_id | всего_отправлено
В главном запросе пытался сделать так:
Но SQL ругается на конструкцию JOIN'ов между подзапросами.
Так как объединить результаты подзапросов в главном запросе?
Или может есть способ сделать всё иначе/проще?
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
Решение задачи: «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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д