복붙노트

[SQL] MySQL의에서 "숫자 표 만들기"

SQL

MySQL의에서 "숫자 표 만들기"

나는 MySQL의 연속적인 숫자의 큰 테이블을 생성하기 위해 노력하고있어.

난 그냥 2 열을 원하는; 기본 키 및 X가 매우 큰 0-X의 범위와 숫자 열. 약. 64,000 행을해야한다. 나는 성공없이이 코드를 시도했다 :

CREATE TABLE numbers (
   number           INT         NOT NULL
   CONSTRAINT XPKnumbers
      PRIMARY KEY CLUSTERED (number)
    )

INSERT INTO numbers (number) VALUES (0)

DECLARE @i          INT
SET @i = 20

WHILE 0 < @i
   BEGIN
      INSERT INTO numbers (number)
         SELECT number + (SELECT 1 + Max(number) FROM numbers)
            FROM numbers

      SET @i = @i - 1
   END

SELECT * FROM numbers

나는이 오류가 발생합니다 :

아무도이 일을하기 위해 어떤 제안이?

해결법

  1. ==============================

    1.세미콜론, 쉼표 누락, 심지어 구문을 수정 한 후에는 여전히 루프에서 또 하나의 행을 삽입 테이블에서 모든 시간을 최대 선택하는 것은 좋은 생각이 아니다.

    세미콜론, 쉼표 누락, 심지어 구문을 수정 한 후에는 여전히 루프에서 또 하나의 행을 삽입 테이블에서 모든 시간을 최대 선택하는 것은 좋은 생각이 아니다.

    http://use-the-index-luke.com/blog/2011-07-30/mysql-row-generator에서 그 사용 발전기 드롭 :

    CREATE OR REPLACE VIEW generator_16
    AS SELECT 0 n UNION ALL SELECT 1  UNION ALL SELECT 2  UNION ALL 
       SELECT 3   UNION ALL SELECT 4  UNION ALL SELECT 5  UNION ALL
       SELECT 6   UNION ALL SELECT 7  UNION ALL SELECT 8  UNION ALL
       SELECT 9   UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL
       SELECT 12  UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL 
       SELECT 15;
    
    CREATE OR REPLACE VIEW generator_256
    AS SELECT ( ( hi.n << 4 ) | lo.n ) AS n
         FROM generator_16 lo, generator_16 hi;
    
    CREATE OR REPLACE VIEW generator_4k
    AS SELECT ( ( hi.n << 8 ) | lo.n ) AS n
         FROM generator_256 lo, generator_16 hi;
    
    CREATE OR REPLACE VIEW generator_64k
    AS SELECT ( ( hi.n << 8 ) | lo.n ) AS n
         FROM generator_256 lo, generator_256 hi;
    
    CREATE OR REPLACE VIEW generator_1m
    AS SELECT ( ( hi.n << 16 ) | lo.n ) AS n
         FROM generator_64k lo, generator_16 hi;
    

    어떤 이유로 당신이 정말로 숫자의 테이블이 필요하면 그냥 할 :

    INSERT INTO numbers(number)
    SELECT n FROM generator_64k WHERE n < 64000
    
  2. ==============================

    2.당신은 열 및 제약 선언 사이에 쉼표를 놓치고있어 :

    당신은 열 및 제약 선언 사이에 쉼표를 놓치고있어 :

    CREATE TABLE numbers (
       number           INT         NOT NULL,
       CONSTRAINT XPKnumbers
          PRIMARY KEY CLUSTERED (number)
        )
    
  3. ==============================

    3.MySQL을 8.0에서 당신은 집계 테이블을 생성 재귀 CTE를 사용할 수 있습니다 :

    MySQL을 8.0에서 당신은 집계 테이블을 생성 재귀 CTE를 사용할 수 있습니다 :

    SET @@cte_max_recursion_depth  = 5000;
    WITH RECURSIVE cte AS
    (
       SELECT 1 AS i
       UNION ALL
       SELECT i+1
       FROM cte
       WHERE i < 3000
    )
    SELECT *
    FROM cte;
    

    DB 휘티 d 혀라도

  4. ==============================

    4.여기에 번호 목록을 생성하는 빠르고 간단한 방법입니다. MySQL을 사용이 쿼리를 실행하면 0.561 초 순서 64,000 번호 목록을 생성했다.

    여기에 번호 목록을 생성하는 빠르고 간단한 방법입니다. MySQL을 사용이 쿼리를 실행하면 0.561 초 순서 64,000 번호 목록을 생성했다.

    set @i = 0;
    
    SELECT * FROM (
    SELECT @i:=@i+1 AS IndexNo FROM my_table -- any real table can be used here
    HAVING 
    @i < 64000
    )x
    
  5. from https://stackoverflow.com/questions/9751318/creating-a-numbers-table-in-mysql by cc-by-sa and MIT license