2014-09-23 81 views
10

我想知道如果我可以从列表中选择给定值并填充行吗?例如,SELECT 1 as one, 2 as two, 3 as three将填充列:MySQL:从值列表中选择

one | two | three 
------------------------ 
1  | 2  | 3 

我在寻找用于填充行的,就像一个剧本:

values 
------- 
1 
2 
3 
4 

谢谢!你可以联合各一个,如果你想要像这样

SELECT 1 AS numbers 
UNION SELECT 2 
UNION SELECT 3 

一个更简单的方式做这样的事情将是使具有自动表递增ID ...插入的另一列

回答

12

表一个空字符串...那么只需要选择自动递增的ID

CREATE TEMPORARY TABLE tmp (
    id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    val varchar(1) 
); 
INSERT INTO tmp (val) 
values 
(""), 
(""), 
(""), 
(""), 
(""), 
(""), 
(""), 
(""), 
(""), 
(""); 
select id from tmp; 

DEMO

+0

有没有类似数组的功能? '选择列表(1,2,3)AS编号“。 – bodruk 2014-09-23 16:26:59

+1

@drux没有SQL没有数组函数..它有表,你基本上可以用作数组。 – 2014-09-23 16:29:06

+0

嘿!谢谢,@John Rudell。 – bodruk 2014-09-23 16:30:14

2

为了得到几个数字,从约翰·拉德尔的方法是可能最方便的是,我可以轻松地将内联视图合并到任何需要运行的查询中。

当我需要大量的数字,例如,1到4000,我可以做这样的事情:

CREATE TABLE digit (d INT(11) NOT NULL PRIMARY KEY); 
INSERT INTO digit (d) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); 

SELECT thousands.d*1000+hundreds.d*100+tens.d*10+ones.d+1 AS n 
    FROM digit ones 
CROSS 
    JOIN digit tens 
CROSS 
    JOIN digit hundreds 
CROSS 
    JOIN digit thousands 
WHERE thousands.d < 4 

我也可以,如果我需要的数字的界限不是活得添加HAVING条款牛逼相当整齐,如

HAVING n >= 121 
    AND n <= 2499 

如果我要确保“数字”是为了回来,我加入了一个ORDER BY条款:

ORDER BY n