首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在没有匹配的情况下,将HAVING子句中的比较从'=‘改为'<’更改输出?

问为什么在没有匹配的情况下,将HAVING子句中的比较从'=‘改为'<’更改输出?
EN

Stack Overflow用户
提问于 2015-07-02 05:14:43
回答 1查看 42关注 0票数 0

在下面的查询中,如果查询不返回任何结果,则将either子句中的比较操作符从'=‘更改为'<’,这样就可以返回(所有NULL中的)1行或不返回任何行。

有人能解释一下为什么这种行为会被证明吗?理想情况下,我希望第一个查询返回0行,但如果不将其包装在另一个查询中以排除NULL,那就更好了。

查询:

代码语言:javascript
复制
SELECT `templates`.* 
FROM `templates` 
INNER JOIN `items` ON `items`.`template_id` = `templates`.`id` 
HAVING COUNT(items.id) = 0

结果:

代码语言:javascript
复制
NULL,NULL,NULL...
(1 row(s) returned)

与以下方面相比:

查询:

代码语言:javascript
复制
SELECT `templates`.* 
FROM `templates` 
INNER JOIN `items` ON `items`.`template_id` = `templates`.`id` 
HAVING COUNT(items.id) < 0

结果:

代码语言:javascript
复制
(0 row(s) returned)

但是,HAVING COUNT(items.id) < 1的这种变化还会返回NULL行:

查询:

代码语言:javascript
复制
SELECT `templates`.* 
FROM `templates` 
INNER JOIN `items` ON `items`.`template_id` = `templates`.`id` 
HAVING COUNT(items.id) < 1

结果:

代码语言:javascript
复制
NULL,NULL,NULL...
(1 row(s) returned)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-02 05:24:29

简单地说,count()函数永远不会返回负值。你的条件是having count(items.id) < 0,意思是having 0 < 0,永远是false。但是having count(items.id)=0可以是真手段,也可以是count(items.id)<1是真,意思是0=0或0<1是真。

代码语言:javascript
复制
mysql> select 1 from test  having count(id)=0;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.29 sec)

mysql> select 1 from test having count(id)<0;
Empty set (0.00 sec)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31176073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档