Есть ли способ использовать вычисляемое поле в предложении где?
Есть ли способ использовать вычисляемое поле в предложении где?
Я хочу сделать что-то вроде
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: "ВСЕГО": неверный идентификатор.
Поэтому я должен использовать
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 ответ
Решение
Логично, что 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
;
Это сработает...
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)
) as Temp
WHERE TOTAL <> 0;