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

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

Patricia Arquette
发布: 2025-01-03 21:13:40
原创
884 人浏览过

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

在 WHERE 子句中使用“Case 表达式列”

Oracle 10.2 SQL 在尝试在 WHERE 子句中使用“Case 表达式列”时提出了挑战。由于 SQL 语句处理的逻辑顺序,遇到错误“ORA-00904:“%s:无效标识符”。

SQL 处理的逻辑顺序

SQL 语句按以下方式处理序列:

  1. FROM:表选择和行组合
  2. WHERE:行过滤
  3. GROUP BY:行分组
  4. HAVING:行过滤
  5. SELECT:列检索
  6. DISTINCT:重复行删除
  7. UNION /EXCEPT/INTERSECT:子查询结果操作
  8. ORDER BY:行排序

错误原因

原始查询的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 子句不能。使用它进行比较。

解决方案 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:重复 CASE 表达式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' ;
登录后复制

简化选项

如果 WHERE 子句条件直接匹配特定部门编号,则可以使用简化选项:

SELECT ename
, job
, 'SALES' AS department
FROM emp
WHERE deptno = 20 ;
登录后复制

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

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板