avatar

目录
SQL的执行顺序问题

SQL的执行顺序问题

众所周知,sql的执行顺序:

sql
1
from... where...group by... having....select ... order by... limit

但是,有一个“bug”,在 MySQL 中:

sql
1
SELECT title, COUNT(title) AS t FROM table GROUP BY title HAVING t >= 2

这样的语句是可以执行的。

正常来说,having在select之前执行,但是却可以使用select的别名,这是为什么呢?

查阅了一切资料,做出如下解释:

解释一

mysql的处理方式是中间生成虚拟表(或者叫临时表),而这个虚拟表的生成的列靠的就是select。

所以猜测类似having之后的操作,其实内部已经根据select生成了虚拟表,列自然也是as后的。

解释二

之所以MYSQL可以这么做是因为MYSQL用的是临时表,

在having前已经产生了数据,所以可以用别名,但SQL Sever不可以,SQL是在having后才Select。

文章作者: Yang4
文章链接: https://masteryang4.github.io/2020/04/10/SQL%E7%9A%84%E6%89%A7%E8%A1%8C%E9%A1%BA%E5%BA%8F%E9%97%AE%E9%A2%98/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 MasterYangBlog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论