Почему Oracle SQL не позволяет нам использовать псевдонимы в условиях? - PullRequest
2 голосов
/ 10 февраля 2010

Oracle PL / SQL не позволит пользователям использовать псевдонимы в условиях. В большинстве случаев для меня очень удобно использовать псевдонимы вместо длинных операторов. В чем причина? Что плохого случилось бы, если бы мы могли использовать псевдонимы в условиях?

Пример случая: Что не так с этим запросом SQL?

Ответы [ 2 ]

6 голосов
/ 10 февраля 2010

Я думаю, что это только потому, что именно это определяет стандарт SQL. Я не согласен с gd047 в том, что псевдоним не может быть использован : предложение HAVING работает с (промежуточными) результатами запроса, то есть после агрегирования, поэтому для запроса это выглядит довольно просто синтаксический анализатор, чтобы использовать псевдоним для доступа к этому результату.

Вы, конечно, можете избежать повторения СУММЫ, как это (используя пример из связанного вопроса):

SELECT *
from
( SELECT donem, bolge_adi, sehir_tasra "1=S, 2=T", 
         COUNT(DISTINCT mekankodu) "M.SAYISI",
         SUM(b2b_dagitim + b2b_transfer - b2b_iade) satis
  FROM mps_view2
  WHERE donem IN ('200612','200712','200812','200912')
  AND (ob IS NOT NULL OR b2b_ob IS NOT NULL)
  GROUP BY donem, bolge_adi, sehir_tasra
)
WHERE satis > 0
ORDER BY donem, bolge_adi, sehir_tasra
4 голосов
/ 10 февраля 2010

Псевдонимы столбцов работают только с условием order by, поскольку order by выполняется после select, а все остальные перед select, поэтому они не имеют никакого представления об псевдониме.

Вы можете увидеть эту страницу . Я считаю, что движок Oracle работает так же.

...