2012-07-19 64 views
0

我想提交一個查詢,如果計算結果爲TRUE則返回一個值,如果爲FALSE,則返回FALSE。MYSQL中的列計算比較

SELECT 
IF(VALID,EMPLOYEE_NAME,"NULL") AS NAME, 
IF(SALARY/DAYS > 1000, TRUE, FALSE) AS VALID; 

看起來像VALID var在MYSQL中是未知的,直到查詢結束。
所以我的問題是:
是否有任何可能的方式來評估VALID該查詢?

回答

1

您還可以使用子查詢做到這一點:

SELECT IF(VALID,EMPLOYEE_NAME,"NULL") AS NAME, VALID 
from (select t.*, IF(SALARY/DAYS > 1000, TRUE, FALSE) AS VALID 
     from t 
    ) t 

我不是複製邏輯的大風扇。我更喜歡使用子查詢來定義變量。這使得更改定義變得更容易。通常,這不會影響性能,因爲(大多數)sql引擎足夠聰明,可以在讀取數據時進行計算。

1

不可以。別名不能在同一查詢中使用。

你必須重複自己。

SELECT 
IF(SALARY/DAYS > 1000,EMPLOYEE_NAME,"NULL") AS NAME, 
IF(SALARY/DAYS > 1000, TRUE, FALSE) AS VALID; 
+0

SALARY/DAYS是一個非常漫長而複雜的表達。有沒有一種方法可以在查詢的開頭定義它,並且稍後再引用它,就像我們在代碼中一樣?在$ var = expression(..)中; if($ var)do ...; if($ var)do ...; ? – Ted 2012-07-19 15:08:23

+0

@Ted那麼你有幾種方法:子查詢,查看,存儲過程......很難說如果你給「樣本」代碼什麼是最好的! – 2012-07-19 15:25:48