Используйте рассчитанное поле в предложении Where
Вопрос
Есть ли способ использовать рассчитанное поле в 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
;
Решение
Логически, то 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
;
Не связан с StackOverflow