sql – 在where子句中使用’case expression column’
SELECT ename,job,CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp /* !!! */ WHERE department = 'SALES' 这失败了:
有没有办法克服Oracle 10.2 SQL中的这个限制? 解决方法这个错误的原因是SQL SELECT语句按照以下顺序进行逻辑处理:> FROM:选择一个表或多个JOINed表,以及与ON条件匹配的所有行组合. 因此,您不能在WHERE子句中使用,尚未填充或计算.另见这个问题:oracle-sql-clause-evaluation-order *逻辑处理:请注意,数据库引擎还可以为查询选择另一个评估顺序(这是他们通常做的!)唯一的限制是结果应该与使用上述顺序相同. 解决方案是将查询包含在另一个中: SELECT * FROM ( SELECT ename,CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp ) tmp WHERE department = 'SALES' ; 或在WHERE条件下复制计算: SELECT ename,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,'SALES' AS department FROM emp WHERE deptno = 20 ; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |