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

标签 sql oracle select alias

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

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

最佳答案

我认为这只是因为这是 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

关于sql - 为什么 Oracle SQL 不允许我们在条件中使用别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2235883/

相关文章:

sql - 在单个表中获得缺席的订购号

javascript - Bootstrap - 如何在 JavaScript 中动态添加 <select class ="form-control">?

php - 使用 PHP 根据 SQL 查询数据库中的值更改表的颜色

c++ - PostgreSql 查询中的参数数据类型错误

mysql - 使用 WHERE IN 和 MIN 的子查询

sql - 如何在 Oracle 中将各种 VARCHAR 作为数字进行比较

mysql - 如何在 Oracle 中获取相似的值

mysql - 尝试获取慈善组织的捐款和费用月度报告

c# - 仅当使用 System.Data.OracleClient 时,函数才保持 INVALID,通过 SQL Developer 工作

mysql - 根据查询结果从表中重新选择