为什么结果显示某些等级值为空
why result shows some grade value as null
SELECT
`job_id`,
CASE `job_id`
WHEN 'AD_PRES' THEN 'A'
WHEN 'ST_MAN' THEN 'B'
WHEN 'IT_PROG' THEN 'C'
END AS 'grade'
FROM
`employees`
WHERE
'grade' IS NOT NULL;
MySQL 中的单引号表示字符串文字。对于数据库标识符,例如列名或 table 名称,请使用双引号、反引号,或者如果不需要,则什么都不用。在这里你不需要转义别名。此外,您通常不能在 WHERE
子句中引用别名。但是,MySQL 已重载其 HAVING
运算符以允许它引用别名。把这些放在一起,我们可以使用这个版本:
SELECT job_id,
CASE job_id WHEN 'AD_PRES' THEN 'A'
WHEN 'ST_MAN' THEN 'B'
WHEN 'IT_PROG' THEN 'C'
END AS grade
FROM employees
HAVING grade IS NOT NULL;
请注意,您也可以将其表述为:
SELECT job_id,
CASE job_id WHEN 'AD_PRES' THEN 'A'
WHEN 'ST_MAN' THEN 'B'
WHEN 'IT_PROG' THEN 'C'
END AS grade
FROM employees
WHERE job_id IN ('AD_PRES', 'ST_MAN', 'IT_PROG');
这也有效,因为如果 job_id
是这三个值之一,则 grade
只会是非 NULL
。
SELECT
`job_id`,
CASE `job_id`
WHEN 'AD_PRES' THEN 'A'
WHEN 'ST_MAN' THEN 'B'
WHEN 'IT_PROG' THEN 'C'
END AS 'grade'
FROM
`employees`
WHERE
'grade' IS NOT NULL;
MySQL 中的单引号表示字符串文字。对于数据库标识符,例如列名或 table 名称,请使用双引号、反引号,或者如果不需要,则什么都不用。在这里你不需要转义别名。此外,您通常不能在 WHERE
子句中引用别名。但是,MySQL 已重载其 HAVING
运算符以允许它引用别名。把这些放在一起,我们可以使用这个版本:
SELECT job_id,
CASE job_id WHEN 'AD_PRES' THEN 'A'
WHEN 'ST_MAN' THEN 'B'
WHEN 'IT_PROG' THEN 'C'
END AS grade
FROM employees
HAVING grade IS NOT NULL;
请注意,您也可以将其表述为:
SELECT job_id,
CASE job_id WHEN 'AD_PRES' THEN 'A'
WHEN 'ST_MAN' THEN 'B'
WHEN 'IT_PROG' THEN 'C'
END AS grade
FROM employees
WHERE job_id IN ('AD_PRES', 'ST_MAN', 'IT_PROG');
这也有效,因为如果 job_id
是这三个值之一,则 grade
只会是非 NULL
。