程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql 裡面使用row_number() 的用法和注意,mysqlrow_number

Mysql 裡面使用row_number() 的用法和注意,mysqlrow_number

編輯:MySQL綜合教程

Mysql 裡面使用row_number() 的用法和注意,mysqlrow_number


雖然使用不多,但是也有情況是需要在mysql 裡面寫語句開發功能的。在sql server 使用慣了,習慣了使用row_number() 函數進行排序,但是mysql 確沒有這樣一個函數。然後找到了po主寫的一篇 文章。通過變量賦值來查詢的。(PS 我測試的版本是mysql 5.6)

參考鏈接:http://www.cnblogs.com/advocate/archive/2012/03/02/2376900.html

先建表

CREATE TABLE `test` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Col1` varchar(50) DEFAULT NULL,
  `Col2` varchar(50) DEFAULT NULL,
  `Col3` int(11) DEFAULT NULL,
  `Col4` float DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

然後插入測試數據,使用po主介紹的方法來測試

insert into test(Col1,Col2,Col3,Col4) values (1,2,3,4),(1,2,6,5),(1,2,7,8),(1,"激發",5,7);


delimiter //

select @row:=case when @row is null then 1 else @row+1 end as RNr,        
        ID,Col1,Col2,Col3,Col4 from test ;
//
delimiter ;

結果查詢出結果是 

 

查詢出來的記過,Rnr為什麼都是1 呢?因為對於本次查詢來說,@row 這個變量的值,一直都是null ,所以根據case 的判別式來看的話,就只能是1 了。引起了這種現象。但是再執行,就正常的了,我們將同樣的腳本

再執行一次,查出來應該就是2345了

 

測試驗證確實如此,由此可見。變量在本次會話裡面是一直存在的,並且每次會沿用,所以就出現前面的那種情況。

其實對應的解決方法也很簡單,既然因為每個會話都會用同一個值,那麼只需要在開始的時候賦初值就可以解決問題了,比如我們這個例子在開始的時候將 set @row = 0; 加上這句,那麼每次執行,都會先賦初值,當然就可以得到一致的執行效果了。

 

這個測試告訴了我,在這個數據庫裡面,控制變量初始值hin重要。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved