【发布时间】:2015-10-30 07:40:20
【问题描述】:
我们可以在 SQL 查询中使用 HAVING 子句来过滤行组。当我们使用 GROUP BY 子句时,它直接以这种方式工作。
但是,让我们看看这个查询:
select 1 where 1!=1 having count(*)=0;
(或为 Oracle 附加 'from dual')。
如果 HAVING 真的做组过滤,在 WHERE 之后我们没有任何行,所以我们没有任何组,结果必须是 'No row selected'。
但在 PostgreSQL、MySQL 和 Oracle 中,我们得到“1”作为查询结果。
问题:HAVING 究竟是如何工作的?
用于测试的 SQL Fiddle:http://www.sqlfiddle.com/#!15/d5407/51
【问题讨论】:
-
检测表是否有 0 行的愚蠢方法...
-
WHERE 返回 0 行,所以我们有 0 组行。如果 HAVING 只做行组过滤,为什么要开始并为空输入做一些评估?
标签: mysql sql oracle postgresql having-clause