MySQL中SELECT @no:=0语句的作用及在多表查询中的用法咨询
嘿,这个问题我太熟了!让我给你掰扯清楚~
关于MySQL中
SELECT @no:=0的作用解析 首先,@no是MySQL里的用户会话变量——这种变量只在当前数据库连接的会话中有效,断开连接后就会失效。而SELECT @no:=0的核心作用,就是把这个会话变量@no初始化为0。
你看到的查询结构SELECT t1.a, t2.a, ....... FROM table t1, (SELECT @no:=0) t2,其实是把变量初始化语句包装成了一个临时虚拟表t2,这么做有两个很实用的好处:
- 确保整个查询执行前,
@no已经被正确赋值为0,不会出现变量未初始化导致的NULL值问题 - 不需要单独执行一条
SET @no:=0的前置语句,把初始化逻辑直接整合到主查询里,写法更简洁
举个最常见的使用场景:给查询结果加自增序号
SELECT @no:=@no+1 AS row_num, t1.a FROM table t1, (SELECT @no:=0) t2 ORDER BY t1.a;
这里每查询一行数据,@no就会自动加1,最终输出的row_num就是从1开始的连续序号——这也是这种初始化方式最常用的场景之一。
另外还要注意两个细节:
- 会话变量是会话级的,如果同一个会话里之前给
@no赋过其他值,这个初始化语句会直接覆盖旧值,保证当前查询用的是初始的0 - 如果去掉
(SELECT @no:=0) t2直接用@no,第一次执行时@no是NULL,@no+1也会是NULL,第二次执行才会从1开始,这显然不是我们想要的效果,所以初始化步骤至关重要
内容的提问来源于stack exchange,提问作者Lemures
相关产品推荐
相关产品推荐

