2016-01-06 78 views
2

假設我們有如下表:SQL - 按值範圍2列之間

CREATE TABLE a (
    id int primary key, 
    from int, 
    to int 
); 

INSERT INTO a (id, from, to) VALUES (1, 1, 3); 
INSERT INTO a (id, from, to) VALUES (2, 1, 2); 
INSERT INTO a (id, from, to) VALUES (3, 2, 4); 

我需要編寫一個查詢,將返回:

+------------+---------+ 
| id  | value | 
+------------+---------+ 
|  1  | 1  | 
|  1  | 2  | 
|  1  | 3  | 
|   |   | 
|  2  | 1  | 
|  2  | 2  | 
|   |   | 
|  3  | 2  | 
|  3  | 3  | 
|  3  | 4  | 
+------------+---------+ 

第一列是id本身。第二列應包含fromto之間的所有值,值之間爲第1步。

+2

考慮處理在應用層數據顯示的問題,如果這是可用的(如位PHP的) – Strawberry

回答

2

你需要一個數字表。您如何生成這樣的表取決於您使用的數據庫。但是,對於小的數字,你可以做手工:

select t.id, (t.from + n.n) as value 
from t join 
    (select 0 as n union all select 1 union all select 2 union all select 3 
    ) n 
    on t.from + n.n <= t.to; 
+0

我有非常小的數字,所以我會堅持你的答案。謝謝! – nickbusted

+1

@nickbusted如果你需要更多的行,你可以使用這個[答案](http://stackoverflow.com/a/2652051/460557)來生成一個更大的集合。 –