2016-11-23 35 views
0

我目前使用如何生成SQL表具有0序列號的最大值

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的版本。 此外,我無法使用row_number()rank_over()按功能分區。

+0

mySQL工作臺6.2 2008版 – Dgstah

+0

當然!將更新.. – Dgstah

回答

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; 

這將在每次執行

+0

這一步是有效的,但我將不得不手動執行查詢,而numberofrowsdesired也是一個自動編號。有沒有其他方法? – Dgstah

+0

你可以把它放在一個while循環中,用一個(shell)變量代替NUMBEROFROWSDESIRED並迭代直到插入的行數不是2的乘方。(0不是2的乘方,因此如果你需要例如16384行,你最終會得到額外的執行無所事事)。 – Ronald

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的盒子。

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個號碼。

如果有更好的方法,請讓我知道。