在mysql中加入5个表以在同一查询中显示两个不同表的两个SUM列

问题描述 投票:0回答:1

我正在一个项目中,以控制用于不同任务的项目的库存。每个任务都有一个或多个仓库,每个仓库接收完成任务所需的物料输入,最后用于该任务的实际物料数量在used_items表中。

TABLES

task:
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个涉及所有关系的表时,我没有知道怎么做。

我感谢您能给我的任何帮助。

mysql subquery left-join multiple-tables
1个回答
0
投票

首先,我将使用JOIN转换查询1和查询2,这使其更具可读性。

示例(请参见http://www.sql-join.com/):

select order_date, order_amount
from customers
join orders on customers.customer_id = orders.customer_id

然后为Query1和Query2创建一个视图:

CREATE VIEW `myView1` AS
    select order_date, order_amount
    from customers
    join orders on customers.customer_id = orders.customer_id

然后您可以进行新的查询以同时加入两个视图。

祝你好运:)

© www.soinside.com 2019 - 2024. All rights reserved.