首页 >数据库 >mysql教程 >在 WHERE 子句中使用 CASE 表达式时如何解决 ORA-00904 错误?

在 WHERE 子句中使用 CASE 表达式时如何解决 ORA-00904 错误?

Barbara Streisand
Barbara Streisand原创
2025-01-03 08:50:40113浏览

How to Resolve ORA-00904 Error When Using CASE Expressions in WHERE Clauses?

克服 ORA-00904: 在 WHERE 子句中使用“case 表达式列”

当尝试使用 case 表达式作为列时由于 SQL 的逻辑处理顺序,可能会出现 WHERE 子句 ORA-00904。 WHERE 子句在 SELECT 子句之前求值,因此无法利用 SELECT 的 case 表达式中定义的列。

解决方案 1:嵌套查询

解决此问题,将原始查询括在嵌套查询中:

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';

解决方案2:重复计算

或者,在 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';

简化查询

对于提出具体情况,也可以使用简化的查询:

SELECT ename, job, 'SALES' AS department
FROM emp
WHERE deptno = 20;

以上是在 WHERE 子句中使用 CASE 表达式时如何解决 ORA-00904 错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn