2012-07-19 59 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