Mysql查询结果带行号【带解析】

先看结论:
SELECT @rowNum:=@rowNum + 1 AS ‘行号’,a.* FROM tableName a,(SELECT @rowNum:=0) b

然后逐步解析

我们假设有一张这样的表Teacher,里面有4条数据如下
这里写图片描述

先看这条sql

SELECT @rowNum:=0;

这里写图片描述
结果只有一个常数0
因为@rowNum:=0的意思是声明了一个叫rowNum的变量并赋值为0

然后看这条sql

SELECT b.*,a.* FROM Teacher a,(SELECT @rowNum:=0) b;

这里写图片描述
这是最简单的两表连接,由于b表只有一条数据,那么结果就如图上所示,拿b表的唯一的数据0,和a表中的4条数据挨个组合就行了

OK,我们离最终的解决方案很近了
那就是这条sql

SELECT @rowNum:=@rowNum + 1 AS '行号',a.* FROM Teacher a,(SELECT @rowNum:=0) b;

这里写图片描述

对比上一条sql,会发现b.*变成了@rowNum:=@rowNum + 1,推演一下两表连接过程:
1.a表拿出第一条数据(1,’叶平’),@rowNum:=@rowNum + 1的意思是对rowNum这个变量+1并赋值给rowNum。还记得rowNum最初被赋值为多少么?没错,0,因此这里rowNum就变成了1,第一行结果就变成了(1,1,’叶平’)
2.a表拿出第二条数据(2,’贺高’),@rowNum:=@rowNum + 1执行后rowNum就变成了2,第二行结果就是(2,2,’贺高’)
……
嗯,不再赘述,就是这样。利用自定义的变量作为一个桥梁,在表连接过程中每行加一,就得到了行序号。

  • 17
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值