關於數字的經典SQL程式設計:連續範圍問題

season0891發表於2013-01-05
【IT168 技術】連續範圍問題也是一個非常經典的SQL程式設計問題。為了使講解易於理解,我們先來建立一些測試資料。
#div_code img{border:0px;}<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtCREATE TABLE t ( a INT UNSIGNED NOT NULL PRIMARY KEY );

INSERT INTO t VALUES(
1);
INSERT INTO t VALUES(
2);
INSERT INTO t VALUES(
3);
INSERT INTO t VALUES(
100);
INSERT INTO t VALUES(
101);
INSERT INTO t VALUES(
103);
INSERT INTO t VALUES(
104);
INSERT INTO t VALUES(
105);

  可以看到1~3是連續的,100~101是連續的,103~105是連續的,那麼怎麼能得到如下表所示的結果呢?

關於數字的經典SQL程式設計:連續範圍問題
▲連續範圍

  我們來看下面這句SQL語句及其返回的結果集。

#div_code img{border:0px;}<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtmysql> SELECT a,@a:=@a+1 rn FROM t,(SELECT @a:=0) AS a;
+-----+------+
| a   | rn   |
+-----+------+
|  
1 |    1 |
|  
2 |    2 |
|  
3 |    3 |
|
100 |    4 |
|
101 |    5 |
|
103 |    6 |
|
104 |    7 |
|
105 |    8 |
+-----+------+
8 rows in set (0.00 sec)

相關文章