前言
有时候会遇到mysql查询的需求,需要在查询结果集新增一列序号,依次递增,当然这种实现有很简单的方案,直接用结果集for循环添加一个字段即可实现,本文讲的是通过sql查询直接实现。
1、新建一张auto 表

如果我们想筛选出level为3的字段,可写如下sql
select * from auto where level = 3;
结果如下

2、此时我们想再多加一列为序号列,让序号递增
修改sql如下
select (@xh := @xh + 1) as xh, a.* from (select * from auto where level = 3) a, (select @xh := 0) x;
结果如下

此时发现,结果集中新增了xh列,一次递增,实现了需求
3、语句解析
:=
在mysql中是赋值操作,@xh
在mysql是变量,(@xh := @xh + 1) as xh
意思相当于java中的 a = a + 1
, 后面的(select @xh := 0) x
相当java中的a = 0
,最后执行整条sql,mysql先执行from后的语句,此时(select * from auto where level = 3) a
会产生一张虚表,(select @xh := 0) x;
会将@xh
变量赋值为0,最后执行from前面的语句,就出现上述结果
附上mysql查询语句时,关键字顺序和执行查询时顺序
关键字顺序
select
from
join
on
where
group by
having
union
order by
limit
查询时执行顺序
from
on
join
where
group by
having
select
distinct
union
order by
limit
网友评论