1

好的,我正在一点一点学习什么HAVING意思。

现在,我的问题是这两个查询是否具有不同的性能特征:

没有

SELECT x + y AS z, t.*  FROM t
WHERE 
x = 1 and
x+y = 2

SELECT x + y AS z, t.*  FROM t
WHERE 
x = 1
HAVING
z = 2
4

2 回答 2

1

是的,它应该有所不同 - (1) 预计会更快。

拥有将确保首先运行主查询,然后应用拥有过滤器 - 所以它基本上适用于(查询减去拥有)返回的数据集。

第一个查询应该更可取,因为它根本不选择那些记录。

于 2010-11-27T11:08:26.087 回答
1

HAVING 用于包含 GROUP BY 或返回包含聚合函数结果的单行的查询。例如SELECT SUM(scores) FROM t HAVING SUM(scores) > 100返回一行,或者根本没有行。

SQL 标准认为第二个查询无效,并且不被某些数据库系统接受。

于 2010-11-27T13:40:34.263 回答