为什么mysql having的条件表达式可以直接使用select后的别名?
2017-07-02 21:31
288 查看
SQL语句的语法顺序:
因此一般不能在having condition中使用select list中的alias。
但是mysql对此作了扩展。在mysql 5.7.5之前的版本,ONLY_FULL_GROUP_BY sql mode默认不开启。在5.7.5或之后的版本默认开启。
如果ONLY_FULL_GROUP_BY sql mode不开启,那么mysql对标准SQL的扩展可以生效:
允许在select list、having condition和order by list中使用没有出现在group by list中的字段。此时mysql会随机选择没有出现在group by list中的字段的值。效果和使用ANY_VALUE()是相同的。
允许在having condition中使用select list中的alias
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> UNION -> ORDER BY
因此一般不能在having condition中使用select list中的alias。
但是mysql对此作了扩展。在mysql 5.7.5之前的版本,ONLY_FULL_GROUP_BY sql mode默认不开启。在5.7.5或之后的版本默认开启。
如果ONLY_FULL_GROUP_BY sql mode不开启,那么mysql对标准SQL的扩展可以生效:
允许在select list、having condition和order by list中使用没有出现在group by list中的字段。此时mysql会随机选择没有出现在group by list中的字段的值。效果和使用ANY_VALUE()是相同的。
允许在having condition中使用select list中的alias
相关文章推荐
- 为什么还需要邮件服务器 直接使用企业邮箱不使用邮件服务器是否可以
- request和response对象(疑问:为什么servlet和jsp中可以直接使用req和res对象?如何理解内置的含义?)
- request和response对象(疑问:为什么servlet和jsp中可以直接使用req和res对象?如何理解内置的含义?)
- SQL语句中,为什么where子句不能使用列别名,而order by却可以?
- 为什么原生JS可以直接使用ID名称来获取元素
- jsp内置对象为什么可以直接使用?
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
- SQL语句中,为什么where子句不能使用列别名,而order by却可以?
- cin/cout流对象为什么可以作为条件表达式?
- C#中LINQ多条件JOIN时为什么使用匿名类就可以?
- SQL中where语句不能使用直接跟在select后列的别名
- 如题,既然直接对一个实例发送方法名就可以调用这个方法,那为什么还要使用performSelector:去调呢?两者u有啥区别
- 为什么原生JS可以直接使用ID名称来获取元素
- C#中LINQ多条件JOIN时为什么可以使用匿名类
- 【转载】为什么枚举可以直接使用==
- 为什么在SQL语句的GROUP BY里面不可以使用别名
- SQL语句中,为什么where子句不能使用列别名,而order by却可以?
- 为什么其他类没继承System类 ,也可以直接使用System.exit()方法??
- 为什么Java同包目录下的类不需要引入就可以直接使用
- 当我们使用某个表达式作为输出的一列时,我们无法再Where条件中直接使用该列作判断条件