MySQL Query中的HAVING和WHERE有什么区别?

CRI*_*ion 5 mysql select where-clause having-clause

我有一个viewX基于一些表的连接的view():

当我使用时WHERE,查询被延迟,处理器使用率达到50%,最后我需要关闭mysqld.exe服务并重新启动以尝试再次解决问题.

当我使用时HAVING,查询执行完美而快速,我得到结果,一切准备就绪.

该查询与此类似:

SELECT * FROM viewX WHERE column_of_view = 'foo'

SELECT * FROM viewX HAVING column_of_view = 'foo'
Run Code Online (Sandbox Code Playgroud)

怎么了?

我找到的解决方案是做这样的事情:

SELECT * FROM (SELECT * FROM viewX) as T WHERE column_of_view = 'foo'

SELECT * FROM (SELECT * FROM viewX) as T HAVING column_of_view = 'foo'
Run Code Online (Sandbox Code Playgroud)

两种查询工作都很精细,但我觉得这很糟糕!(SELECT*FROM(... viewX)????)

Muh*_*han 5

WHERE 用于根据条件过滤查询结果.

HAVING用于对聚合函数的结果应用过滤器.在没有聚合函数的情况下,它的功能与WHERE相同.

http://blog.sqlauthority.com/2007/07/04/sql-server-definition-comparison-and-difference-between-having-and-where-clause/