Mysql
是否可以將已經計算的列重用到 MySQL 中的查詢中?
我有一個包含複雜列的查詢,我想將此列結果用於另一列,例如:
SELECT ( /* Complex query */ ) as myValue, if( myValue > 10, "OK" , "" ) from table;
但他的查詢返回錯誤:
Error Code: 1054. Unknown column 'myValue' in 'field list
如何重用已計算的欄位?
您可以使用使用者定義的變數。
SELECT @temp := ( /* Complex query */ ) AS myValue, IF ( @temp > 10, "OK" , "" ) FROM table;
也許伺服器需要初步的變數定義。如果是這樣的話,
SELECT @temp := ( /* Complex query */ ) AS myValue, IF ( @temp > 10, "OK" , "" ) FROM table, (SELECT @temp := 0) dummy;
文件沒有指定輸出值計算的順序,但實際上它總是與它們的寫入順序相匹配。
我的偏好是使用子查詢,總結外部查詢的結果:
SELECT sq.myvalue, IF(sq.myvalue > 10 , "OK" , "") as `myresult` FROM ( SELECT ( /* complex query */ ) as `myvalue` FROM table ) sq;
另一種方法是在 IF () 語句中重複複雜查詢,而不是使用
myvalue
SELECT ( /*complex query*/ ) as `myvalue` , IF ( ( /*complex query*/ ) > 10 , "OK", "" ) as `myresult` FROM table;
真的不在乎這種方法。查詢(或計算)越複雜,隨著時間的推移,這種替代方案就越不受歡迎。