优化查询

用户名

具有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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章