首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySql - HAVING与WHERE

MySql - HAVING与WHERE
EN

Stack Overflow用户
提问于 2013-04-23 04:16:35
回答 2查看 46.6K关注 0票数 40

这两个查询之间的区别是什么?

SELECT f.name, 
       u.name, 
       u.id 
FROM   families f 
       JOIN units u 
         ON f.unit_id = u.id 
HAVING u.id IN( 43, 413, 22 )

和:

SELECT f.name, 
       u.name, 
       u.id 
FROM   families f 
       JOIN units u 
         ON f.unit_id = u.id 
WHERE  u.id IN( 43, 413, 22 )

这两个查询的结果完全相同。那么,区别在哪里呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-23 04:24:41

sql中having子句和where子句之间的区别在于,where子句不能用于聚合,但having子句可以用于聚合。可以这样认为: having子句是where子句的附加过滤器。

哪个更好:click

票数 48
EN

Stack Overflow用户

发布于 2013-04-23 04:20:45

WHERE用于选择正在处理的原始表中的数据。

HAVING用于过滤查询生成的结果集中的数据。这意味着它可以在SELECT子句中引用聚合值和别名。

例如,可以这样写:

SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
HAVING diff > 10

这在使用WHERE时是行不通的,因为diff是一个别名,而不是原始表列之一。你可以改为这样写:

SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
WHERE t1.val - t2.val > 10

但是,它可能必须做两次所有减法:一次用于选择,另一次用于生成结果集。

票数 64
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16155937

复制
相关文章

相似问题

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