Используйте рассчитанное поле в предложении Where

StackOverflow https://stackoverflow.com/questions/3884678

  •  28-09-2019
  •  | 
  •  

Вопрос

Есть ли способ использовать рассчитанное поле в 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 
; 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top