为什么MySQL中CASE语句生成的新列使用AS重命名会报错?
问题原因
- 别名声明位置错误:你将
AS Status写在了CASE表达式的括号内部,而MySQL中SELECT子句的列别名需要定义在整个列表达式的最外侧,不属于CASE语句的内部语法。额外的括号包裹了END AS Status整体,导致MySQL无法识别别名语法,触发报错。 - 移除
AS Status后括号内仅剩下合法的CASE表达式,因此可以正常运行,但此时新列会使用系统默认的生成名称,无法自定义为Status。
正确写法
你可以选择任意一种调整方案:
方案1:去掉不必要的括号,将别名放在CASE语句末尾
SELECT *, -- 根据CourseCode设置学生状态 CASE WHEN CourseCode = 907 THEN 'Already in the course' WHEN CourseCode <> 907 THEN 'Upgraded to the course' ELSE NULL END AS Status FROM ecestudents;
方案2:保留括号,将别名放在括号外侧
SELECT *, -- 根据CourseCode设置学生状态 (CASE WHEN CourseCode = 907 THEN 'Already in the course' WHEN CourseCode <> 907 THEN 'Upgraded to the course' ELSE NULL END) AS Status FROM ecestudents;
内容的提问来源于stack exchange,提问作者Aakanksha Mantri
相关产品推荐
相关产品推荐

