MySQL-从多个表中选择总和
任何人都可以帮助完成以下简短的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
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,并向上投票。