Я работаю в проекте, чтобы контролировать запас товаров, которые используются в различных задачах. Каждая задача имеет один или несколько складов, каждый склад получает входные данные, необходимые для выполнения задачи, и, наконец, реальные qtys, используемые для задачи, находятся в таблице used_items.
TABLES
task:
taskId | name
-----------------
warehouse:
warehous_id | taskId
----------------------
inputs:
itemId | qty | warehouse_id
--------------------------------
items:
itemId | itemName
--------------------
used:
itemId | qty | taskId
-----------------------------
Я пытаюсь получить отчет для элементов определенной задачи, используя следующие запросы:
QUERY1: элементы, используемые в отдельной задаче c (например, задача 1):
SELECT t.taskId
, it.itemId
, it.itemName
, SUM(u.qty) total_used
FROM items it
, task t
, used u
WHERE it.itemId = u.itemId
AND t.taskId = u.taskId
AND t.taskId = 1
GROUP
BY it.itemId
этот запрос дает следующий результат:
taskId itemId itemName total_used
1 2 item2 10
1 3 item3 1
1 4 item4 6
1 5 item5 6
1 6 item6 2
1 8 item8 9
1 9 item9 4
1 10 item10 7
Этот результат верный. Используется 8 элементов.
QUERY2: ввод элементов для отдельной задачи c (например, задача 1):
SELECT t.taskId
, it.itemId
, it.itemName
, SUM(ip.qty) total_input
FROM items it
, task t
, inputs ip
, warehouse w
WHERE it.itemId=ip.itemId
AND t.taskId=w.taskId
AND w.warehouseId=ip.warehouseId
AND t.taskId=1
GROUP
BY it.itemId
этот запрос дает следующий результат:
taskId itemId itemName total_input
1 1 item1 24
1 2 item2 26
1 3 item3 21
1 4 item4 18
1 5 item5 22
1 6 item6 3
1 7 item7 17
1 8 item8 12
1 9 item9 17
1 10 item10 20
Этот результат верный. 10 элементов ввода.
оба запроса дают правильные результаты. Но проблема возникает, когда я пытаюсь объединить оба запроса, чтобы показать два столбца с суммой каждого из них, результат не в порядке.
Объединенный запрос:
SELECT t.taskId
, it.itemId
, it.itemName
, SUM(ip.qty) total_input
, SUM(u.qty) total_used
FROM items it
, task t
, inputs ip
, warehouse w
, used u
WHERE it.itemId=ip.itemId
AND t.taskId=w.taskId
AND w.warehouseId=ip.warehouseId
AND u.itemId=it.itemId
AND u.taskId=t.taskId
AND t.taskId=1
GROUP
BY it.itemId
результат:
taskId itemId itemName total_input total_used
1 2 item2 52 90
1 3 item3 21 7
1 4 item4 18 24
1 5 item5 22 30
1 6 item6 3 4
1 8 item8 12 27
1 9 item9 17 20
1 10 item10 20 35
Это приводит к неправильному результату, во-первых, потому что он показывает только 8 столбцов вместо 10, а также неверные итоги. Я много искал и пытался понять, как это сделать правильно, но я нашел только примеры подзапросов или левого соединения с двумя таблицами, что проще, но когда дело доходит до 5 таблиц со всеми связанными отношениями, я не знаю, как это сделать.
Я ценю любую помощь, которую вы можете мне дать.