2015-10-08 84 views
2

當我以下查詢MySQL查詢分配錯誤

Select 
case 
     when (@nume=Start_Date) then null   
     when (@nume!=Start_Date) then @num 
End, 
case 
     when (@nume=Start_Date and @nume:=End_Date) then null 
     when (@nume!=Start_Date) then @nume 
End, 
case 
     when (@nume!=Start_Date and @nume:=End_Date and @num:=Start_Date) then @nume 
End 
from P,(Select @num:=(Select Start_Date from P order by Start_Date desc Limit 1),@nume:=(Select End_Date from P order by Start_Date desc Limit 1)) as A 
; 

在下一回合它分配整數1個值@nume,而不是作爲日期它應該。

回答

2

「它應該是」。嗯,在documentation明確規定:

一般情況下,除了在SET語句,你永遠不應該 一個值分配給一個用戶變量和相同的 語句中讀出的值。例如,爲了增加一個變量,這是好的:

SET @a = @a + 1; 

對於其他的語句,如SELECT,你可能會得到你 預期的結果,但是這不能保證。在以下聲明中,您可能會認爲MySQL將首先評估@a,然後再執行 分配:

SELECT @a,@a:= @ a + 1,...;

但是,涉及用戶 變量的表達式的評估順序未定義。

您對代碼應該做什麼的解釋與文檔直接相反。我建議你問另一個問題,描述你正試圖解決的問題,並且包括樣本數據和期望的結果。