2016-12-28 61 views
-3

我有一個查詢使用子查詢兩次來獲得If else條件中的結果,因爲我無法首先保存結果在條件下評估。我怎樣才能優化查詢任何幫助,我會感激。需要優化查詢以避免子查詢在if if條件中的查詢中進行兩次求值

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。