代码之家  ›  专栏  ›  技术社区  ›  Luc M

在where子句中可以使用计算字段吗?

  •  13
  • Luc M  · 技术社区  · 14 年前

    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
    ;
    

    ORA-00904: "TOTAL": invalid identifier .

    所以我不得不用

    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
    ;
    
    1 回复  |  直到 5 年前
        1
  •  36
  •   Shannon Severance    14 年前

    ,和 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 
    ;