有一种方法可以在where子句中使用计算字段吗?

Luc*_*c M 14 sql oracle plsql ora-00904

有一种方法可以在where子句中使用计算字段吗?

我想做点什么

SELECT a, b, a+b as TOTAL FROM (
   select 7 as a, 8 as b FROM DUAL
   UNION ALL
   select 8 as a, 8 as b FROM DUAL
   UNION ALL
   select 0 as a, 0 as b FROM DUAL
)
WHERE TOTAL <> 0
;
Run Code Online (Sandbox Code Playgroud)

但我得到ORA-00904:"TOTAL":标识符无效.

所以我必须使用

SELECT a, b, a+b as TOTAL FROM (
   select 7 as a, 8 as b FROM DUAL
   UNION ALL
   select 8 as a, 8 as b FROM DUAL
   UNION ALL
   select 0 as a, 0 as b FROM DUAL
)
WHERE a+b <> 0
;
Run Code Online (Sandbox Code Playgroud)

Sha*_*nce 36

逻辑上,该select子句是评估的查询的最后部分之一,因此别名和派生列不可用.(除了order by,最后逻辑上发生.)

使用派生表远离此:

select * 
from (SELECT a, b, a+b as TOTAL FROM ( 
           select 7 as a, 8 as b FROM DUAL 
           UNION ALL 
           select 8 as a, 8 as b FROM DUAL 
           UNION ALL 
           select 0 as a, 0 as b FROM DUAL) 
    )
WHERE TOTAL <> 0 
; 
Run Code Online (Sandbox Code Playgroud)

  • OP问的是不需要别名的Oracle.我很高兴这个答案能够帮助你,即使它是针对不同的平台. (3认同)
  • 啊 - 刚刚注意到Oracle错误消息和标签*blush*.不过,它指出了正确的方向,所以upvote :-) (2认同)