Это невозможно сделать из-за внутренних сложностей, связанных с оценкой предложения WHERE. Но если то, что вы называете псевдонимом, является длинным выражением, которое вы не хотели бы повторять, есть типичное решение для этого. От https://forums.oracle.com/forums/thread.jspa?threadID=1107532:
Стандартным решением для этого является перемещение запроса во встроенный
представление (без предиката where-условия), а затем добавьте
предикат where-clause с использованием псевдонима во внешнем запросе.
Так что-то вроде этого:
select ...
from (select ... here complex expression that is aliased ...
from ...
where ) A
where ... here condition that uses the A.alias column ...
В вашем примере это будет:
SELECT d, b, c
FROM ( SELECT a AS d, b, c FROM myTable ) AS myAliasedTable
WHERE d = 1
Но, конечно, это не имеет смысла в вашем буквальном примере. Если то, что вы называете псевдонимом, является просто именем столбца, то просто используйте фактическое имя столбца в WHERE, в этом случае реального недостатка нет.
Также обратите внимание, что если вы используете этот метод, вы должны поместить как можно большую часть предложения WHERE во внутренний запрос (то есть части, которые не ссылаются на столбец с псевдонимом), чтобы ограничить размер получаемого псевдонима. Таблица. Например, если вы также хотите протестировать b
в вашем примере, это будет:
SELECT d, b, c
FROM (
SELECT a AS d, b, c
FROM myTable
WHERE b = 1
) AS myAliasedTable
WHERE d = 1