Oracle SQL含CASE表达式查询报错:FROM关键字位置异常求助
问题解决办法
错误原因
你的SQL语句存在两处语法问题,直接触发了FROM keyword not found where expected报错:
- CASE表达式写法错误:你使用的
CASE COMMISSION WHEN IS NOT NULL仅适用于等值匹配场景(比如CASE 字段 WHEN '指定值' THEN ...),无法用来判断非空条件。正确的条件判断格式应为CASE WHEN COMMISSION IS NOT NULL。 - 列分隔符缺失:
SELECT子句中COMMISSION后面未添加逗号,导致数据库解析语句时逻辑混乱,无法识别FROM关键字的正确位置。
修正后的SQL语句
场景1:需要显示薪资和佣金列
SELECT LASTNAME, FIRSTNAME, SALARY, COMMISSION, CASE WHEN COMMISSION IS NOT NULL THEN SALARY + COMMISSION ELSE SALARY END AS TOTAL_SALARY FROM EMPLOYEE;
场景2:仅显示姓氏、名字和总薪资(匹配你的需求描述)
SELECT LASTNAME, FIRSTNAME, CASE WHEN COMMISSION IS NOT NULL THEN SALARY + COMMISSION ELSE SALARY END AS TOTAL_SALARY FROM EMPLOYEE;
额外简化写法
如果你的数据库中COMMISSION字段的空值可按0处理,还能用COALESCE函数简化语句,效果完全一致:
SELECT LASTNAME, FIRSTNAME, SALARY + COALESCE(COMMISSION, 0) AS TOTAL_SALARY FROM EMPLOYEE;
内容的提问来源于stack exchange,提问作者Soumyajit Roy
相关产品推荐
相关产品推荐

