[SQL] MySQL의에서 "숫자 표 만들기"
SQLMySQL의에서 "숫자 표 만들기"
나는 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.세미콜론, 쉼표 누락, 심지어 구문을 수정 한 후에는 여전히 루프에서 또 하나의 행을 삽입 테이블에서 모든 시간을 최대 선택하는 것은 좋은 생각이 아니다.
세미콜론, 쉼표 누락, 심지어 구문을 수정 한 후에는 여전히 루프에서 또 하나의 행을 삽입 테이블에서 모든 시간을 최대 선택하는 것은 좋은 생각이 아니다.
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.당신은 열 및 제약 선언 사이에 쉼표를 놓치고있어 :
당신은 열 및 제약 선언 사이에 쉼표를 놓치고있어 :
CREATE TABLE numbers ( number INT NOT NULL, CONSTRAINT XPKnumbers PRIMARY KEY CLUSTERED (number) )
-
==============================
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.여기에 번호 목록을 생성하는 빠르고 간단한 방법입니다. 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
from https://stackoverflow.com/questions/9751318/creating-a-numbers-table-in-mysql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 별칭 오라클의 테이블에 '로'키워드를 사용 하는가? (0) | 2020.03.23 |
---|---|
[SQL] ORA-00918 : 모호 SELECT 정의 컬럼 * (0) | 2020.03.23 |
[SQL] SQL - 하나 개의 쿼리에서 여러 테이블에 삽입 (0) | 2020.03.23 |
[SQL] PostgreSQL을 / NodeJS와 결과의 배열로 테이블을 가입하세요 (0) | 2020.03.23 |
[SQL] SQL Server의 날짜 범위를 생성하는 방법 (0) | 2020.03.23 |