Documentos de MySQL sobre Declaraciones de control de flujo decir:
Documentos en Programas almacenados y vistas decir:
Sintaxis de declaraciones compuestas
Por lo tanto, parece que puede ejecutar un bucle explícito solo dentro de un procedimiento almacenado, una función o un disparador.
Dependiendo de lo que haga en su instrucción SQL, puede ser aceptable usar una tabla (o vista) de números (Creando una "Tabla de Números" en mysql , MYSQL:tabla de números secuenciales ).
Si su consulta es SELECT
y está bien devolver el resultado de su SELECT
10 veces como un conjunto de resultados largo (en lugar de 10 conjuntos de resultados separados) puede hacer algo como esto:
SELECT MainQuery.*
FROM
(
SELECT 1 AS Number
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
) AS Numbers
CROSS JOIN
(
SELECT 'some data' AS Result
) AS MainQuery
Ejemplo para INSERTAR
Recomiendo tener una tabla permanente de números en su base de datos. Es útil en muchos casos. Consulte los enlaces anteriores sobre cómo generarlo.
Entonces, si tienes una tabla Numbers
con int
columna Number
con valores de 1 a, digamos, 100K (como yo) y clave principal en esta columna, luego en lugar de este bucle:
DECLARE count INT DEFAULT 0;
WHILE count < 10 DO
INSERT INTO table_name(col1,col2,col3)
VALUES("val1","val2",count);
SET count = count + 1;
END WHILE;
puedes escribir:
INSERT INTO table_name(col1,col2,col3)
SELECT ("val1", "val2", Numbers.Number-1)
FROM Numbers
WHERE Numbers.Number <= 10;
También funcionaría casi 10 veces más rápido.