2

我需要一种方法来定义一个变量来保存 MYSQL 中表达式的结果,以便我可以在整个查询中使用该变量。
所以这是可能的:

SELECT 
IF(VALID,EMPLOYEE_NAME,"NULL") AS NAME,   /** <-- Note *VALID* 
IF(VALID,ID,"NULL") AS ID,   /** <-- And here... 
IF(VALID,OCCUPATION,"NULL") AS OCCUPATION,   /** <-- And here... 

IF((**LONG EXPRESSION**), TRUE, FALSE) AS VALID; /** <-- Taken from here

其中 LONG EXPRESSION 可以是非常长的表达式,我需要为 IF 语句中的每个返回的列放置,有很多 IF。

我的直觉告诉我,我应该能够像在每一种程序语言中一样做到这一点:

$var = LONG_EXPRESSION(....);
if($var) {..};
if($var) {..};
if($var) {..};
if($var) {..};

这样,它更合乎逻辑,更不容易出错。易于维护,可读,甚至优化。

在 MYSQL 中有没有等价的?
因此,为每一行执行定义一个参数?

4

2 回答 2

1

您只需要一个子查询:

SELECT IF(VALID,EMPLOYEE_NAME,"NULL") AS NAME,   /** <-- Note *VALID* 
       IF(VALID,ID,"NULL") AS ID,   /** <-- And here... 
       IF(VALID,OCCUPATION,"NULL") AS OCCUPATION,
       ...,
       VALID
from (select t.*, IF((**LONG EXPRESSION**), TRUE, FALSE) AS VALID
      from t
    ) t
于 2012-07-20T01:27:08.903 回答
0

可能更合适的方法是OUTER JOIN在原始表和子查询之间使用WHERE包含长表达式的子句。

SELECT IF(b.rowid IS NULL, "NULL", a.employee_name) AS name,
       IF(b.rowid IS NULL, "NULL", a.id) AS id,
       IF(b.rowid IS NULL, "NULL", a.occupation) AS occupation,
       ...,
       IF(b.rowid IS NULL, 0, 1) AS valid
FROM mytable a
LEFT OUTER JOIN
(SELECT rowid FROM mytable
 WHERE **LONG EXPRESSION**) b
ON a.rowid = b.rowid

这假定rowid是表中的唯一键列。

于 2012-07-20T04:26:20.247 回答