Domanda

C'è un modo per utilizzare un campo calcolato nella clausola where?

Io voglio fare qualcosa di simile

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
;

ma ottengo ORA-00904: "TOTAL": invalid identifier.

Quindi devo usare

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
;
È stato utile?

Soluzione

Logicamente , la clausola select è una delle ultime parti di una query valutata, così gli alias e colonne derivate non sono disponibili. (Tranne che per order by, che logicamente accade ultima.)

Utilizzo di una tabella derivata è lontano intorno a questo:

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 
; 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top