具有3张桌子的结构
Table min consist of matcode,min_qty,jo_no,mr_no,min_no
Table min_out_body consist of matcode,out_qty,jo_no,mr_no,min_no
Table eu_min_out_body consist of matcode,out_qty,jo_no,mr_no,min_no
数据如下:
[min]
matcode min_qty jo_no mr_no min_no
xxx 100 1A A11 A111
xxx 150 2A A22 A222
yyy 100 1A A11 A111
zzz 150 2A A22 A222
[min_out_body]
matcode out_qty jo_no mr_no min_no
xxx 10 1A A11 A111
xxx 60 1A A11 A111
xxx 100 2A A22 A222
yyy 100 1A A11 A111
[eu_min_out_body]
matcode out_qty jo_no mr_no min_no
xxx 20 1A A11 A111
xxx 50 2A A22 A222
zzz 100 2A A22 A222
我试图达到的结果是:
matcode min_qty jo_no mr_no balance
xxx 100 1A A11 10
zzz 150 2A A22 50
使用以下代码查询:
SELECT
min.matcode,
min.min_qty,
min.jo_no,
min.mr_no,
(min.min_qty-(
select ifnull(sum(out_qty),0)
FROM min_out_body
WHERE min_no=min.min_no
and matcode=min.matcode
and jo_no=min.jo_no
and mr_no=min.mr_no
)-(
select ifnull(sum(out_qty),0)
FROM eu_min_out_body
WHERE min_no=min.min_no
and matcode=min.matcode
and jo_no=min.jo_no
and mr_no=min.mr_no
)
) as balance
FROM min
WHERE (min.min_qty - (select
ifnull(sum(out_qty),0)
FROM min_out_body
WHERE min_no=min.min_no
and matcode = min.matcode
and jo_no = min.jo_no
and mr_no = min.mr_no) - (select
ifnull(sum(out_qty),0)
FROM eu_min_out_body
WHERE min_no=min.min_no
and matcode = min.matcode
and jo_no = min.jo_no
and mr_no = min.mr_no)) > 0
我可以得到结果,但是有什么方法可以简化查询并减少处理时间?
这是来自Sql Fiddle sqlfiddle.com/#!2/1fb8b/1的示例数据
我想我对您在先前几乎相同的问题中的评论不太了解。答案实际上应该是相同的,只是删除了所有WHERE子句,而后者明确只执行了matcode ='xxx'。
通过删除这些,您将根据每个min / eu_min表的条件获得所有matcode作为组的一部分。
删除WHERE子句。
where mob.matcode = 'xxx'
where Emob.matcode = 'xxx'
where min.matcode = 'xxx' AND min.min_qty ....
to just
where min.min_qty ...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句