前言
有時(shí)候會(huì)遇到mysql查詢的需求,需要在查詢結(jié)果集新增一列序號(hào),依次遞增,當(dāng)然這種實(shí)現(xiàn)有很簡(jiǎn)單的方案,直接用結(jié)果集for循環(huán)添加一個(gè)字段即可實(shí)現(xiàn),本文講的是通過sql查詢直接實(shí)現(xiàn)。
1、新建一張auto 表

1.png
如果我們想篩選出level為3的字段,可寫如下sql
select * from auto where level = 3;結(jié)果如下

2.png
2、此時(shí)我們想再多加一列為序號(hào)列,讓序號(hào)遞增
修改sql如下
select (@xh := @xh + 1) as xh, a.* from (select * from auto where level = 3) a, (select @xh := 0) x;
結(jié)果如下

3.png
此時(shí)發(fā)現(xiàn),結(jié)果集中新增了xh列,一次遞增,實(shí)現(xiàn)了需求
3、語句解析
:= 在mysql中是賦值操作,@xh 在mysql是變量,(@xh := @xh + 1) as xh 意思相當(dāng)于java中的 a = a + 1, 后面的(select @xh := 0) x 相當(dāng)java中的a = 0,最后執(zhí)行整條sql,mysql先執(zhí)行from后的語句,此時(shí)(select * from auto where level = 3) a會(huì)產(chǎn)生一張?zhí)摫恚?code>(select @xh := 0) x;會(huì)將@xh變量賦值為0,最后執(zhí)行from前面的語句,就出現(xiàn)上述結(jié)果
附上mysql查詢語句時(shí),關(guān)鍵字順序和執(zhí)行查詢時(shí)順序
關(guān)鍵字順序
select
from
join
on
where
group by
having
union
order by
limit
查詢時(shí)執(zhí)行順序
from
on
join
where
group by
having
select
distinct
union
order by
limit