我正在一个项目中,以控制用于不同任务的项目的库存。每个任务都有一个或多个仓库,每个仓库接收完成任务所需的物料输入,最后用于该任务的实际物料数量在used_items表中。
TABLEStask:
taskId | name
-----------------
warehouse:
warehous_id | taskId
----------------------
inputs:
itemId | qty | warehouse_id
--------------------------------
items:
itemId | itemName
--------------------
used:
itemId | qty | taskId
-----------------------------
我正在尝试使用以下查询来获取某些任务的项目的报告:
[QUERY1:在单独任务中使用的项目(例如任务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:输入一个单独任务的项目(例如任务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个输入项目。
两个查询都会生成正确的结果。但是,当我尝试将两个查询组合在一起以显示两列以及每列的SUM时,问题就来了,结果不正确。
组合查询: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个涉及所有关系的表时,我没有知道怎么做。
我感谢您能给我的任何帮助。