Frage

Gibt es eine Möglichkeit, ein berechnetes Feld in der where Klausel zu verwenden?

Ich mag wie etwas tun

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
;

, aber ich erhalte ORA-00904: "TOTAL": invalid identifier.

Also ich verwende

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
;
War es hilfreich?

Lösung

Logischer , die select Klausel ist eines der letzten Teile einer Abfrage ausgewertet, so dass die Aliase und abgeleiteten Spalte nicht verfügbar sind. (Außer auf order by, die logisch geschieht letzte.)

eine abgeleitete Tabelle zu verwenden ist weg, um diesen:

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 
; 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top