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

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

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

Есть такие таблицы: • товар: товар_id, наименование_товара • ЦН: ЦН_id (primary), дата_сдачи • СЦН: ЦН_id, товар_id, количество • ТТН: ТТН_id (primary), дата_отправки • СТТН: ТТН_id, товар_id, количество Тут ПП (платёжные поручения) указывают отправленый заказчику товар. ЦН (цеховые накладные) — товар произведённый. Надо получить остатки товара на заданную дату, т.е. таблицу наименование_товара | остаток_на_складе В первом подзапросе я получал товар_id | всего_сдано Во втором товар_id | всего_отправлено В главном запросе пытался сделать так:
Листинг программы
  1. SELECT наименование_товара, (всего_сдано) - (всего_отправлено) AS остаток_на_складе
  2. FROM товар JOIN
  3. (
  4. (--первый подзапрос
  5. SELECT СЦН.товар_id, SUM(СЦН.количество) AS всего_сдано
  6. FROM СЦН JOIN ЦН ON СЦН.ЦН_id = ЦН.ЦН_id
  7. WHERE ЦН.дата_сдачи<=CURDATE() GROUP BY СЦН.товар_id
  8. )
  9. JOIN
  10. (--второй подзапрос
  11. SELECT СТТН.товар_id, SUM(СТТН.количество) AS всего_отправлено
  12. FROM СТТН JOIN ТТН ON СТТН.ТТН_id = ТТН.ТТН_id
  13. WHERE ТТН.дата_отправки<=CURDATE() GROUP BY СТТН.товар_id
  14. )
  15. ON СЦН.товар_id = ТТН.товар_id
  16. )
  17. ON товар.товар_id = СЦН.товар_id
  18. HAVING остаток_на_складе>0
Но SQL ругается на конструкцию JOIN'ов между подзапросами. Так как объединить результаты подзапросов в главном запросе? Или может есть способ сделать всё иначе/проще?

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

textual
Листинг программы
  1. SELECT product.product_name, (ifnull(SUM(scn.quantity),0) - ifnull(SUM(sttn.quantity),0)) AS have
  2. FROM product LEFT JOIN
  3. (
  4.     (scn JOIN cn ON scn.CN_id=cn.CN_id)
  5.     LEFT JOIN
  6.     (sttn JOIN ttn ON sttn.TTN_id=ttn.TTN_id)
  7.     ON scn.product_id = sttn.product_id
  8. )
  9. ON product.product_id = scn.product_id  
  10. GROUP BY product.product_name
  11. HAVING have>0

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


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

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

10   голосов , оценка 4.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы