Oracle 10.2 SQL 在尝试在 WHERE 子句中使用“Case 表达式列”时提出了挑战。由于 SQL 语句处理的逻辑顺序,遇到错误“ORA-00904:“%s:无效标识符”。
SQL 语句按以下方式处理序列:
原始查询的WHERE子句中:
SELECT ename , job , CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp WHERE department = 'SALES'
'department ' 由 CASE 表达式生成的列在 WHERE 子句求值期间尚不存在,因此,WHERE 子句不能。使用它进行比较。
要克服此限制,请将查询包含在子查询中:
SELECT * FROM ( SELECT ename , job , CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp ) tmp WHERE department = 'SALES' ;
或者,在 WHERE 中复制 CASE 表达式子句:
SELECT ename , job , CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp WHERE CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END = 'SALES' ;
如果 WHERE 子句条件直接匹配特定部门编号,则可以使用简化选项:
SELECT ename , job , 'SALES' AS department FROM emp WHERE deptno = 20 ;
以上是如何在 Oracle 10.2 WHERE 子句中使用 CASE 表达式列?的详细内容。更多信息请关注PHP中文网其他相关文章!