MySQL-从多个表中选择总和

MySQL-从多个表中选择总和,mysql,Mysql,任何人都可以帮助完成以下简短的mysql查询: SELECT mr.matcode, IFNULL(SUM(mr.mr_qty),0) AS total_mr_qty, IFNULL(SUM(mb.out_qty), 0) AS out_qty FROM mr INNER JOIN material m ON mr.matcode = m.matcode INNER JOIN job_order jo ON mr.jo_no = j

任何人都可以帮助完成以下简短的mysql查询:

SELECT 
   mr.matcode, 
   IFNULL(SUM(mr.mr_qty),0) AS total_mr_qty, 
   IFNULL(SUM(mb.out_qty), 0) AS out_qty
FROM mr 
   INNER JOIN material m 
     ON mr.matcode = m.matcode 
   INNER JOIN job_order jo 
     ON mr.jo_no = jo.jo_no  
   LEFT OUTER JOIN min_out_body mb 
     ON mr.jo_no = mb.jo_no 
     AND mr.mr_no = mb.mr_no 
     AND mr.matcode = mb.matcode 
   WHERE m.matcode >= '600NH04R0003220' 
     AND m.matcode <= '600NH04R0003220' 
     AND UCASE(jo.status) NOT LIKE 'C%' 
   GROUP BY mr.matcode, mb.matcode
作业订单表如下:

mr_no     matcode            mr_qty         jo_no
----------------------------------------------------------
MR001     600NH04R0003220    2800           S6914-S01
MR002     600NH04R0003220    1800           S6915-S01
jo_no           status
-------------------------
S6914-S01       RELEASED
S6915-S01       RELEASED
doc_no     item_no     matcode             out_qty        jo_no      mr_no
---------------------------------------------------------------------------------
A001       001         600NH04R0003220     1700           S6914-S01  MR001
A001       002         600NH04R0003220     1000           S6914-S01  MR001
A002       001         600NH04R0003220     1700           S6915-S01  MR002
matcode             descr                       u_measure
-------------------------------------------------------------------
600NH04R0003220     Dummy Description Here      KG
 AND mr.mr_no = mb.mr_no 
   LEFT OUTER JOIN min_out_body mb 
   ...
   INNER JOIN job_order jo 
     ON mr.jo_no = jo.jo_no  
   LEFT OUTER JOIN min_out_body mb 
     ON mr.jo_no = mb.jo_no 
   ...
   left outer JOIN (select doc_no, item_no, matcode, sum(out_qty) out_qty, jo_no from min_out_body group by jo_no)  mb 
最小输出表如下:

mr_no     matcode            mr_qty         jo_no
----------------------------------------------------------
MR001     600NH04R0003220    2800           S6914-S01
MR002     600NH04R0003220    1800           S6915-S01
jo_no           status
-------------------------
S6914-S01       RELEASED
S6915-S01       RELEASED
doc_no     item_no     matcode             out_qty        jo_no      mr_no
---------------------------------------------------------------------------------
A001       001         600NH04R0003220     1700           S6914-S01  MR001
A001       002         600NH04R0003220     1000           S6914-S01  MR001
A002       001         600NH04R0003220     1700           S6915-S01  MR002
matcode             descr                       u_measure
-------------------------------------------------------------------
600NH04R0003220     Dummy Description Here      KG
 AND mr.mr_no = mb.mr_no 
   LEFT OUTER JOIN min_out_body mb 
   ...
   INNER JOIN job_order jo 
     ON mr.jo_no = jo.jo_no  
   LEFT OUTER JOIN min_out_body mb 
     ON mr.jo_no = mb.jo_no 
   ...
   left outer JOIN (select doc_no, item_no, matcode, sum(out_qty) out_qty, jo_no from min_out_body group by jo_no)  mb 
材料表如下:

mr_no     matcode            mr_qty         jo_no
----------------------------------------------------------
MR001     600NH04R0003220    2800           S6914-S01
MR002     600NH04R0003220    1800           S6915-S01
jo_no           status
-------------------------
S6914-S01       RELEASED
S6915-S01       RELEASED
doc_no     item_no     matcode             out_qty        jo_no      mr_no
---------------------------------------------------------------------------------
A001       001         600NH04R0003220     1700           S6914-S01  MR001
A001       002         600NH04R0003220     1000           S6914-S01  MR001
A002       001         600NH04R0003220     1700           S6915-S01  MR002
matcode             descr                       u_measure
-------------------------------------------------------------------
600NH04R0003220     Dummy Description Here      KG
 AND mr.mr_no = mb.mr_no 
   LEFT OUTER JOIN min_out_body mb 
   ...
   INNER JOIN job_order jo 
     ON mr.jo_no = jo.jo_no  
   LEFT OUTER JOIN min_out_body mb 
     ON mr.jo_no = mb.jo_no 
   ...
   left outer JOIN (select doc_no, item_no, matcode, sum(out_qty) out_qty, jo_no from min_out_body group by jo_no)  mb 
我试图得到的结果是:

matcode            total_mr_qty             out_qty       
---------------------------------------------------------
600NH04R0003220    4600                     4400          
但是,使用上述查询,结果是:

matcode            total_mr_qty             out_qty
-------------------------------------------------------------
600NH04R0003220    7400                     4400        
mr_数量结果将加倍,这是不正确的

有人能告诉我上面的问题是什么吗

更新1:添加物料表


更新2:在第1点添加测试小提琴:

mr_no     matcode            mr_qty         jo_no
----------------------------------------------------------
MR001     600NH04R0003220    2800           S6914-S01
MR002     600NH04R0003220    1800           S6915-S01
jo_no           status
-------------------------
S6914-S01       RELEASED
S6915-S01       RELEASED
doc_no     item_no     matcode             out_qty        jo_no      mr_no
---------------------------------------------------------------------------------
A001       001         600NH04R0003220     1700           S6914-S01  MR001
A001       002         600NH04R0003220     1000           S6914-S01  MR001
A002       001         600NH04R0003220     1700           S6915-S01  MR002
matcode             descr                       u_measure
-------------------------------------------------------------------
600NH04R0003220     Dummy Description Here      KG
 AND mr.mr_no = mb.mr_no 
   LEFT OUTER JOIN min_out_body mb 
   ...
   INNER JOIN job_order jo 
     ON mr.jo_no = jo.jo_no  
   LEFT OUTER JOIN min_out_body mb 
     ON mr.jo_no = mb.jo_no 
   ...
   left outer JOIN (select doc_no, item_no, matcode, sum(out_qty) out_qty, jo_no from min_out_body group by jo_no)  mb 
将根据您的表结构/数据生成错误。这是你在小提琴上阐明的。所以没问题

第2点:

mr_no     matcode            mr_qty         jo_no
----------------------------------------------------------
MR001     600NH04R0003220    2800           S6914-S01
MR002     600NH04R0003220    1800           S6915-S01
jo_no           status
-------------------------
S6914-S01       RELEASED
S6915-S01       RELEASED
doc_no     item_no     matcode             out_qty        jo_no      mr_no
---------------------------------------------------------------------------------
A001       001         600NH04R0003220     1700           S6914-S01  MR001
A001       002         600NH04R0003220     1000           S6914-S01  MR001
A002       001         600NH04R0003220     1700           S6915-S01  MR002
matcode             descr                       u_measure
-------------------------------------------------------------------
600NH04R0003220     Dummy Description Here      KG
 AND mr.mr_no = mb.mr_no 
   LEFT OUTER JOIN min_out_body mb 
   ...
   INNER JOIN job_order jo 
     ON mr.jo_no = jo.jo_no  
   LEFT OUTER JOIN min_out_body mb 
     ON mr.jo_no = mb.jo_no 
   ...
   left outer JOIN (select doc_no, item_no, matcode, sum(out_qty) out_qty, jo_no from min_out_body group by jo_no)  mb 
将加入所有mb,其中有两个条目用于相同的作业编号“S6914-S01”。这将从另一个表中获取行两次

第3点:

mr_no     matcode            mr_qty         jo_no
----------------------------------------------------------
MR001     600NH04R0003220    2800           S6914-S01
MR002     600NH04R0003220    1800           S6915-S01
jo_no           status
-------------------------
S6914-S01       RELEASED
S6915-S01       RELEASED
doc_no     item_no     matcode             out_qty        jo_no      mr_no
---------------------------------------------------------------------------------
A001       001         600NH04R0003220     1700           S6914-S01  MR001
A001       002         600NH04R0003220     1000           S6914-S01  MR001
A002       001         600NH04R0003220     1700           S6915-S01  MR002
matcode             descr                       u_measure
-------------------------------------------------------------------
600NH04R0003220     Dummy Description Here      KG
 AND mr.mr_no = mb.mr_no 
   LEFT OUTER JOIN min_out_body mb 
   ...
   INNER JOIN job_order jo 
     ON mr.jo_no = jo.jo_no  
   LEFT OUTER JOIN min_out_body mb 
     ON mr.jo_no = mb.jo_no 
   ...
   left outer JOIN (select doc_no, item_no, matcode, sum(out_qty) out_qty, jo_no from min_out_body group by jo_no)  mb 
更正:

mr_no     matcode            mr_qty         jo_no
----------------------------------------------------------
MR001     600NH04R0003220    2800           S6914-S01
MR002     600NH04R0003220    1800           S6915-S01
jo_no           status
-------------------------
S6914-S01       RELEASED
S6915-S01       RELEASED
doc_no     item_no     matcode             out_qty        jo_no      mr_no
---------------------------------------------------------------------------------
A001       001         600NH04R0003220     1700           S6914-S01  MR001
A001       002         600NH04R0003220     1000           S6914-S01  MR001
A002       001         600NH04R0003220     1700           S6915-S01  MR002
matcode             descr                       u_measure
-------------------------------------------------------------------
600NH04R0003220     Dummy Description Here      KG
 AND mr.mr_no = mb.mr_no 
   LEFT OUTER JOIN min_out_body mb 
   ...
   INNER JOIN job_order jo 
     ON mr.jo_no = jo.jo_no  
   LEFT OUTER JOIN min_out_body mb 
     ON mr.jo_no = mb.jo_no 
   ...
   left outer JOIN (select doc_no, item_no, matcode, sum(out_qty) out_qty, jo_no from min_out_body group by jo_no)  mb 
这将使mb具有唯一(jo_no)行

一个疑问:

mr_no     matcode            mr_qty         jo_no
----------------------------------------------------------
MR001     600NH04R0003220    2800           S6914-S01
MR002     600NH04R0003220    1800           S6915-S01
jo_no           status
-------------------------
S6914-S01       RELEASED
S6915-S01       RELEASED
doc_no     item_no     matcode             out_qty        jo_no      mr_no
---------------------------------------------------------------------------------
A001       001         600NH04R0003220     1700           S6914-S01  MR001
A001       002         600NH04R0003220     1000           S6914-S01  MR001
A002       001         600NH04R0003220     1700           S6915-S01  MR002
matcode             descr                       u_measure
-------------------------------------------------------------------
600NH04R0003220     Dummy Description Here      KG
 AND mr.mr_no = mb.mr_no 
   LEFT OUTER JOIN min_out_body mb 
   ...
   INNER JOIN job_order jo 
     ON mr.jo_no = jo.jo_no  
   LEFT OUTER JOIN min_out_body mb 
     ON mr.jo_no = mb.jo_no 
   ...
   left outer JOIN (select doc_no, item_no, matcode, sum(out_qty) out_qty, jo_no from min_out_body group by jo_no)  mb 

输出也可能是基于jou_no的。请检查。

请检查“材料”表的内容和结构?sql中引用了5个表,但列出了4个表。我对表min_out_body和mr进行了更正,将mr_no添加到它们中,并创建了一个fiddle。尝试更正,但它是一个错误。我也编辑了我的答复-你应该跳过第1点。剩下的将解释你应该做些什么来获得你想要的结果。如果您希望输出列中也有jou_no,那么也要小心。在这种情况下,输出将有更多行(每个jou_no也有)。尝试更新fiddle并进行更正,但它会生成错误,我是否遗漏了某些内容?您错过了第三次联接的条件1和条件2。勾选此项后,请将其标记为choosen Response,并向上投票。