如何在SQL中生成具有从0到最大值的序列号的表

时间:2016-11-23 14:49:43

标签: mysql sequence

我目前正在使用

SET @startnum = 0;
SET @endnum = 10;

WITH n AS (
SELECT @startnum AS num
UNION ALL
SELECT @startnum +1 FROM n WHERE @startnum < @endnum
)
SELECT num FROM n ORDER BY num;

但我正在使用的SQL版本不支持&#34;使用table&#34;查询。 此外,我无法按功能使用row_number()rank_over()分区。

3 个答案:

答案 0 :(得分:0)

如果我需要这样一张桌子,我会做以下事情:

create table t (int col1);
insert into t values (1);
create view v as select max(col1) as mcol1 from t;

然后根据需要经常:

insert into t
select col1 + mcol1
  from t, v
 where col1 + mcol1 <= NUMBEROFROWSDESIRED;

这将使每次执行时的表加倍

答案 1 :(得分:0)

我对SQLYog一无所知,但它看起来像是一个MySQL工具,而不是SQL Server(这篇文章用T-SQL标记)。我也不太了解MySQL,但建议创建一个包含所需数量的永久数字表,然后就可以像这样使用它:

-- say I need the numbers 1 to 10:
SELECT N
FROM tally
WHERE N BETWEEN 1 AND 10; -- these can be variables

要创建一个,您可以使用此语法(在T-SQL或MYSql中工作):

CREATE TABLE tally (N int NOT NULL,  PRIMARY KEY (N));

要填充它,你可以使用一个循环(我不推荐循环,但会在这里做一个例外,因为没有其他语法适合你):

T-SQL版本:

DECLARE @i int;
SET @i = 1;

-- T-SQL syntax
WHILE @i <= 1000 -- change this to the max number of rows that you want
BEGIN
  INSERT dbo.tally VALUES (@i);
  SET @i = @i+1;
END;

MySQL语法:

-- MySQL syntax
declare ii int unsigned default 1000;
declare i  int unsigned default 0;

truncate table foo;
start transaction;
while i < ii do
  insert into dbo.tally (N) values (i);
  set i=i+1;
end while;
commit;

注意:我无法测试我的MySQL查询,因为我目前无法访问MySQL框。

答案 2 :(得分:0)

select (h*100+t*10+u+1) x from
(select 0 h union select 1 union select 2 union select 3 union select 4 union
select 5 union select 6 union select 7 union select 8 union select 9) A,
(select 0 t union select 1 union select 2 union select 3 union select 4 union
select 5 union select 6 union select 7 union select 8 union select 9) B,
(select 0 u union select 1 union select 2 union select 3 union select 4 union
select 5 union select 6 union select 7 union select 8 union select 9) C
order by x;

终于工作了!这似乎非常简单直接,我可以使用1000个数字。

如果有更好的方法,请告诉我。