为什么Oracle SQL不允许我们在条件中使用别名?

时间:2010-02-10 10:01:46

标签: sql oracle select alias

Oracle PL / SQL不允许用户在条件中使用别名。在大多数情况下,使用别名而不是长语句对我来说非常实用。这是什么原因?如果我们可以在条件中使用别名会发生什么不好?

示例案例:What's wrong with this SQL query?

2 个答案:

答案 0 :(得分:6)

我认为这只是因为这是SQL标准指定的内容。我不同意gd047别名无法:HAVING子句对查询的(中间)结果进行操作,即在聚合之后,因此对于查询解析器使用别名来访问该结果。

您当然可以避免像这样重复SUM(使用链接问题中的示例):

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

答案 1 :(得分:4)

列别名仅适用于order by子句,因为order by在select之后执行,所有其他之后在select之前执行,因此他们对别名一无所知。

您可以看到此page。我相信Oracle的引擎以同样的方式工作。