2013-12-08 4 views
0

Имея структуру 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

+0

Не могли бы вы объяснить, как вы обработали 3 оригинальные таблицы, чтобы привести к этим двум строкам? –

ответ

0

Я предполагаю, что я не совсем понял из Вашего комментария в предыдущем рядом идентичного вопрос. Ответ должен быть фактически таким же, за исключением удаления всех предложений WHERE, где он явно выполнял только matcode = 'xxx'.

Удаляя их, вы получите МАК-код ALL как часть группы по критериям для каждой таблицы min/eu_min.

Удалить предложения WHERE.

where mob.matcode = 'xxx' 

where Emob.matcode = 'xxx' 

where min.matcode = 'xxx' AND min.min_qty .... 
to just 
where min.min_qty ... 
+0

спасибо DRapp, решила, моя ошибка за то, что вы не уделяете дополнительного внимания вашему запросу. – user3077209

Смежные вопросы