2009-11-27 85 views
0

有沒有更好的方法來在SQL中生成一系列數字而不是下面的數字?我正在使用MySql。在sql子查詢中創建一個數字範圍

SELECT tens.x + ones.x + 1 
FROM 
(SELECT 0 x UNION ALL 
SELECT 1 x UNION ALL 
SELECT 2 x UNION ALL 
... 
SELECT 9 x) ones 

CROSS JOIN 

(SELECT 0 x UNION ALL 
SELECT 10 x UNION ALL 
SELECT 20 x UNION ALL 
... 
SELECT 90 x) tens; 
+0

這是您使用 – 2009-11-27 10:06:25

+0

@ammoQ數據庫 - MySQL的,我一點?更新了問題 – 2009-11-27 10:14:10

回答

1

使用SQL Server 2005 +,您可以利用熱膨脹係數

DECLARE @Start INT, @End INT 

SELECT @Start = 0, @End = 100000 

;WITH Numbers AS (
     SELECT @Start Num 
     UNION ALL 
     SELECT Num + 1 
     FROM Numbers 
     WHERE Num < @End 
) 
SELECT * 
FROM Numbers 
OPTION (MAXRECURSION 0); 
+0

請注意,遞歸的默認最大數量是100.通過調用:option(maxrecursion 32767),可以將其更改爲最大值32767.請參閱http://msdn.microsoft.com/zh-cn/ library/ms175972.aspx – kristof 2009-11-27 10:13:20

+0

嘗試該查詢,它按照@End = 100000指定的順序經過32767 – 2009-11-27 10:14:44

+0

是真的,我不知何故,我沒有注意到,當指定OPTION(MAXRECURSION 0)時,對遞歸沒有限制。謝謝 – kristof 2009-11-27 10:17:50

2

的做,在Oracle中常見的方式是濫用ROWNUM僞:

select rownum from all_objects where rownum<=100; 
1

PostgreSQL讓你使用:

select * from generate_series(2,4); 
generate_series 
----------------- 
       2 
       3 
       4 

這是特定於PostgresSQL引擎的。但是,爲數據庫編寫存儲的程序不應該很難。

0

爲什麼不是loop?像

BEGIN 
     DECLARE a INT Default 0 ; 
     simple_loop: LOOP 
     SET a=a+1; 
     insert into mytable(id) values(a); 
     IF a=1000 THEN 
      LEAVE simple_loop; 
     END IF; 
    END LOOP simple_loop; 

Mysql For Loop

請原諒我修改語法是否錯了,因爲我是一個純粹的SQL SERVER的傢伙(: