2016-12-28 2 views
-3

У меня есть запрос, который дважды использует подзапрос для получения результата в If else, поскольку я не смог выполнить результат первым оценивается в состоянии. Как я могу оптимизировать запрос, какую помощь я буду благодарен.Нужно оптимизировать запрос, чтобы избежать подзапроса, дважды проиллюстрированного в запросе, в условии if else

SELECT 
    IF(
     (SELECT 
       CONVERT(IFNULL(SUM(T.hours), 0) , DECIMAL (10 , 2)) As Val 
      FROM 
       time_entries T 
        JOIN 
       Issues IU2 ON (t.issue_id = IU2.Id) 
      Where 
       IU2.id = IU.Id) <> 0, 

     (SELECT 
       CONVERT(IFNULL(SUM(T.hours), 0) , DECIMAL (10 , 2)) As Val 
      FROM 
       time_entries T 
        JOIN 
       Issues IU2 ON (t.issue_id = IU2.Id) 
      Where 
       IU2.id = IU.Id), 
     99  
     ) AS NotCovered 
FROM 
    issues IU 
     Join 
    custom_values CV ON (IU.project_id = CV.customized_id 
     AND CV.value = '') 
where 
    IU.done_ratio <> 100; 
+0

Можете ли вы объяснить, почему ваш запрос выполняет то, что он делает? Непонятно, почему вы дважды используете подзапрос. – Takarii

+0

Предполагаем ли мы предположить, что это просто * небрежно *, что вы отформатировали свой код в заблуждение? –

+0

В любом случае, если вам нужны хорошие ответы об оптимизации вашего запроса, вы должны предоставить подробную информацию о своих таблицах. –

ответ

0

Попробуйте сначала вычислить все и сохранить его в таблице темп, после чего вы можете выполнить IIF или CASE в таблице темпа.