首页 > 数据库 > mysql教程 > 为什么我不能在 SQL 的 HAVING 子句中使用别名?

为什么我不能在 SQL 的 HAVING 子句中使用别名?

Mary-Kate Olsen
发布: 2024-12-18 15:30:15
原创
1011 人浏览过

Why Can't I Use Aliases in SQL's HAVING Clause?

了解在 HAVING 子句中使用别名的限制

在 SQL 中,在 HAVING 子句中使用别名进行聚合似乎很直观。然而,由于 SQL 查询的特定计算顺序,这种方法会导致错误“无效的列名”。

要理解此限制,了解 SQL 如何执行查询至关重要:

  1. 它首先通过组合 FROM 子句中指定的联接表中的所有行来创建结果集。
  2. WHERE 子句过滤掉符合以下条件的行:不满足其条件。
  3. 然后根据 GROUP BY 子句中指定的列对行进行分组。
  4. 重要的是,HAVING 子句在 SELECT 语句之前进行评估。 这意味着 SQL 此时尚未识别 SELECT 子句中定义的别名。
  5. 仅在评估 HAVING 子句之后SQL 是否继续计算 SELECT 列表中的表达式。

因此,由于 HAVING 子句在 SELECT 子句之前计算,因此在 SELECT 语句中分配给聚合的别名(例如,“col7 ") 在计算 HAVING 表达式时 SQL 还不知道。因此,会出现错误“无效的列名‘col7’”。

相反,ORDER BY 子句在 SELECT 语句之后计算,允许使用 SELECT 子句中定义的别名。这是因为 ORDER BY 子句对 SELECT 语句创建的结果集进行操作。

要解决此问题,请将 HAVING 子句中的别名替换为实际的聚合表达式,如下所示:

以上是为什么我不能在 SQL 的 HAVING 子句中使用别名?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板