假設有這樣的資料
mysql> select id,name from students;
+----+----------+
| id | name |
+----+----------+
| 1 | zhangsan |
| 2 | lisi |
| 3 | wangwu |
| 4 | trx |
| 5 | pjf |
| 6 | wzm |
+----+----------+
再看
mysql> select @rownum:=0;
+------------+
| @rownum:=0 |
+------------+
| 0 |
+------------+
mysql> select @rownum:=1;
+------------+
| @rownum:=1 |
+------------+
| 1 |
+------------+
select @rownum:=0; 表示宣告了乙個叫rownum的變數並賦值為0,這個變數名是自定義的,在sql中我們可以對這個變數進行計算,如:
mysql> select (@rownum:=@rownum+1) as num from (select @rownum:=0) a;
+------+
| num |
+------+
| 1 |
+------+
mysql> select (@rownum:=@rownum+5) as num from (select @rownum:=0) a;
+------+
| num |
+------+
| 5 |
+------+
此時 (select @rownum:=0) a 相當於乙個臨時表,如果將它與students表進行連線將會得到:
mysql> select b.*,id,name from students a,(select @rownum:=0) b;
+------------+----+----------+
| @rownum:=0 | id | name |
+------------+----+----------+
| 0 | 1 | zhangsan |
| 0 | 2 | lisi |
| 0 | 3 | wangwu |
| 0 | 4 | trx |
| 0 | 5 | pjf |
| 0 | 6 | wzm |
+------------+----+----------+
可以看到,b表只有一條資料,與a表連線後就有了a表的6條資料,如果我們對自定義變數@rownum:進行+1操作,會有什麼效果呢?
mysql> select (@rownum:=@rownum+1) as num,id,name from students a,(select @rownum:=0) b;
+------+----+----------+
| num | id | name |
+------+----+----------+
| 1 | 1 | zhangsan |
| 2 | 2 | lisi |
| 3 | 3 | wangwu |
| 4 | 4 | trx |
| 5 | 5 | pjf |
| 6 | 6 | wzm |
+------+----+----------+
6 rows in set (0.00 sec)
這就達到了查詢結果帶行號的目的,我們推演一下兩個表連線的過程:
一開始自定義變數@rownum:=0,a表第一條資料(1,'zhangsan')與自定義變數join,不過我們取的是@rownum:=@rownum+1,即0+1,那麼最終就會得到(1,1,'zhangsan')
此時自定義變數@rownum:=1,a表第一條資料(2,'lisi')與自定義變數join,即1+1,那麼最終得到(2,2,'lisi')
....(以此類推)
由此,我們就能得到sql查詢帶行號的結果。
MySQL查詢顯示行號
oracle中有專門的rownum 顯示行號的函式,而mysql沒有專門的顯示行號函式,但可以通過用 rownum自定義變數顯示行號。主要 rownum rownum 1 rownum select rownum 0 as rn例 如果按照某個字段排序,行號會不規則排列,換成先排序,外層加上行號 s...
使用mysql查詢顯示行號
在oracle獲取記錄行號使用rownum獲取。但是在mysql中查詢顯示行號就沒這麼方面了 方法如下 select rowno rowno 1 as rowno,r.from t article r,select rowno 0 t定義乙個變數 rowno,讓它的初始值為0,每有一行,數值加1。然...
Mysql對查詢結果新增序列號
set rownum 0 select rownum rownum 1 as rownum,from table1 和 的區別?只有在set和update時才和 一樣,賦值的作用,其它都是等於的作用。鑑於此,用變數實現行號時,必須用 不只在set和update時時賦值的作用,在select也是賦值的...