Mysql

是否可以將已經計算的列重用到 MySQL 中的查詢中?

  • October 26, 2021

我有一個包含複雜列的查詢,我想將此列結果用於另一列,例如:

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;

真的不在乎這種方法。查詢(或計算)越複雜,隨著時間的推移,這種替代方案就越不受歡迎。

引用自:https://dba.stackexchange.com/questions/214986