我们可以在SQL查询中使用HAVING子句来过滤行组。当我们使用GROUP BY子句时,它会直接按此方式工作。
但是,让我们看一下这个查询:
但是,让我们看一下这个查询:
select 1 where 1!=1 having count(*)=0;
(或在Oracle中附加'from dual'。)
如果HAVING确实进行分组过滤,在WHERE之后我们没有任何行,因此我们没有任何分组,结果必须是“未选择任何行”。
但在PostgreSQL、MySQL和Oracle中,我们得到查询结果为“1”。
问题:HAVING的工作原理是什么?
用于测试的SQL Fiddle:http://www.sqlfiddle.com/#!15/d5407/51