让我们先GROUP BY
搁置一会。在普通查询中(没有GROUP BY
),语义上的区别是什么?为什么这个答案有效?(在子句中放置别名HAVING
而不是WHERE
)
问问题
429 次
3 回答
3
HAVING
对汇总行WHERE
进行操作 - 在应用之前对整个表进行操作GROUP BY
。(你不能把它放在GROUP BY
一边,HAVING
是一个保留使用的子句GROUP BY
- 省略GROUP BY
不会改变幕后发生的隐含动作)。
同样重要的是要注意,正因为如此,WHERE
可以使用索引而HAVING
不能。(在超级简单的未分组结果集中,理论上您可以使用索引HAVING
,但我从未见过以这种方式实际实现的查询优化器)。
于 2010-11-27T09:58:17.237 回答
2
MySQL 评估查询直到并包括WHERE
子句,然后用HAVING
子句过滤它。这就是为什么HAVING
可以识别列别名,而WHERE
不能。
通过省略该GROUP BY
子句,我相信您只是告诉查询不要对您的任何结果进行分组。
于 2010-11-27T09:59:07.357 回答
1
非常广泛地,WHERE
过滤进入查询(数据库表)的数据,同时HAVING
过滤查询的输出。
子句中的WHERE
语句只能引用表(和其他外部数据源),而子句中的HAVING
语句只能引用查询产生的数据。
于 2010-11-27T10:20:53.220 回答