2012-03-17 22 views
9

Estoy tratando de generar una gran tabla de números consecutivos en mysql. Solo quiero 2 columnas; una clave principal y una columna de números con un rango de 0 a X, donde X es muy grande. Aprox. 64,000 filas deberían hacerlo. He probado este código sin éxito:Creando una "Tabla de números" en mysql

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 

y me sale este error:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONSTRAINT XPKnumbers PRIMARY KEY CLUSTERED (number)) INSERT INTO n' at line 3

Alguien tiene alguna sugerencia para hacer este trabajo?

+0

agregar el elemento 'valores' de 'insertar en tabla (columnas) valores (valores) –

Respuesta

18

Usted se echa en falta un punto y coma, comas, e incluso después de corregir la sintaxis que todavía no es una buena idea para seleccionar un máximo de la mesa cada tiempo solo para insertar una fila más en un bucle.

gota que y utilizar generadores de 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; 

Y si por cualquier razón que realmente necesita una tabla de números simplemente hacer:

INSERT INTO numbers(number) 
SELECT n FROM generator_64k WHERE n < 64000 
+0

Guau, eso era lo que estaba buscando. Todavía no entiendo el código, pero entiendo que funciona. ¡Muchas gracias! – user1262890

+0

Ok esto me está volviendo loco. Este código es exactamente lo que necesito. Funciona en phpmyadmin y en navicat, pero cuando lo traigo al editor sql de dreamweaver, me dice que hay un error de mysql. Cuando dejo el código para la consulta en (a pesar del error) y trato de probar la página web, la página devuelve: Tiene un error en la sintaxis SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de 'CREAR O REEMPLAZAR VISTA generator_256 AS SELECT ((hi.n << 4) | lo.n) COMO n' en la línea 1 ¿Qué soy? haciendo mal? – user1262890

+0

Y cuando traté de ejecutar la consulta para insertar las filas en una tabla de números en phpmyadmin, (no puedo incluir todo el código en el cuadro de comentarios), obtuve: # 1064 - Tiene un error en la sintaxis SQL ; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de 'CREAR O REEMPLAZAR VIEW generator_256 AS SELECT ((hi.n < < 4) | lo.n) AS n' en la línea 9 – user1262890

0

Te estás perdiendo una coma entre la declaración columna y restricción:

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