2016-01-06 41 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)来生成一个更大的集合。 –