SQL语句的having中使用中英文别名问题

一.sql语句的执行顺序

(7)select 
(8)distinct 字段名1,字段名2...
(5)[fun 字段名]
(1)from 表名
(2)inner|left|right|full|cross join on 连接条件
(3)where 筛选条件
(4)group by 分组条件
(6)having 分组后的筛选条件
(9)order by 排序条件
(10)limit <起始偏移量,条目数>
二 having中使用别名

having中可以使用别名,在mysql中使用别名与否可以通过ONLY_FULL_GROUP_BY sql mode设置,5,7,5之前的版本默认不开启,所以不能使用,而之后的版本可以使用

例如以下语句

select dept_id,avg(sal) a FROM emp   GROUP BY dept_id HAVING a>2000;(as可以省略)

 

即使是中文的也可以(不带引号)

 但是如果使用的是中文的别名或者成为字符别名则会存在问题,如下

显示的记录为空,并且提示一个警告信息.

利用show warnings;命令查看警告信息,如下

警告代码为1292,提示信息为 截断错误的double 值.

为什么会出现这个问题?

不知道.使用了的mysql版本是10.3和10.5都是这样,支持中文或者说字符的别名,例如下面的代码

 但是字符别名不能在having中使用.

在网上没有找到对应的解释,因此我根据我目前所学的知识猜测原因有两个

1 mysql是支持字符别名的,但是需要在额外的模块中进行设置..就像ONLY_FULL_GROUP_BY sql mode一样.

2 变量存储不一样,"a"与 a的存储形式是不一样的,就跟java中变量的定义类似,"a"是常量而a是变量,它们存储的形式不同,因此调用的形式也不一样,所以不支持.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值