首页 >数据库 >mysql教程 >如何在 Oracle 10.2 WHERE 子句中使用 CASE 表达式列?

如何在 Oracle 10.2 WHERE 子句中使用 CASE 表达式列?

Barbara Streisand
Barbara Streisand原创
2025-01-03 10:56:39521浏览

How to Use a CASE Expression Column in an Oracle 10.2 WHERE Clause?

在 Oracle 10.2 中的 WHERE 子句中使用 CASE 表达式列

在 Oracle 10.2 中的 WHERE 子句中使用 CASE 表达式列时,您可以如果 CASE 表达式列尚未存在,则会遇到错误“ORA-00904:无效标识符”在查询中定义。这是因为在 Oracle 10.2 中,WHERE 子句在 SELECT 子句之前计算。

解决方案 1:将查询包含在另一个查询中

要克服此限制,您可以将查询包含在定义 CASE 表达式的另一个查询中列:

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 条件中重复计算

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

简化版本

您还可以简化查询,只需从部门编号等于20的员工中选择销售部门即可:

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

以上是如何在 Oracle 10.2 WHERE 子句中使用 CASE 表达式列?的详细内容。更多信息请关注PHP中文网其他相关文章!

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