在sql子查询中创建一系列数字

时间:2009-11-27 10:05:02

标签: sql mysql

有没有更好的方法在SQL中生成一系列数字而不是下面?我正在使用MySql。

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;

4 个答案:

答案 0 :(得分:2)

在Oracle中执行此操作的常用方法是滥用rownum伪列:

select rownum from all_objects where rownum<=100;

答案 1 :(得分:1)

使用Sql server 2005+可以使用CTE

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);

答案 2 :(得分:1)

PostgreSQL允许您使用:

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

这是PostgresQL引擎特有的。但是,为数据库编写存储过程并不困难。

答案 3 :(得分: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家伙(: