Создание диапазона чисел в подзапросе sql

0

Есть ли лучший способ генерировать диапазон чисел в 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;
  • 0
    какую базу данных вы используете?
  • 0
    @ammoQ - MySQL, я обновил вопрос.
Теги:

4 ответа

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. Но не стоит записывать хранимую процедуру для вашей базы данных.

1

Используя сервер Sql 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);
  • 0
    Просто имейте в виду, что максимальное количество рекурсий по умолчанию равно 100. Это можно изменить максимум до 32767, вызвав: option (maxrecursion 32767). см. msdn.microsoft.com/en-us/library/ms175972.aspx
  • 0
    Попробуйте этот запрос, он проходит за 32767, как указано @End = 100000
Показать ещё 2 комментария
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 (:

Ещё вопросы

Сообщество Overcoder
Наверх
Меню