Documentos do MySQL em Declarações de controle de fluxo dizer:
Documentos sobre Programas armazenados e visualizações dizer:
Sintaxe da declaração composta
Portanto, parece que você pode executar um loop explícito apenas dentro de um procedimento armazenado, função ou gatilho.
Dependendo do que você faz em sua instrução SQL, pode ser aceitável usar uma tabela (ou visualização) de números (Criando uma "Tabela de Números" no mysql , MYSQL:tabela de números sequenciais ).
Se sua consulta for um
SELECT
e não há problema em retornar o resultado do seu SELECT
10 vezes como um conjunto de resultados longo (em oposição a 10 conjuntos de resultados separados), você pode fazer algo assim: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
Exemplo para INSERT
Eu recomendo ter uma tabela permanente de números em seu banco de dados. É útil em muitos casos. Veja nos links acima como gerá-lo.
Então, se você tem uma tabela
Numbers
com int
coluna Number
com valores de 1 a, digamos, 100K (como eu) e chave primária nesta coluna, em vez deste loop: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;
você pode escrever:
INSERT INTO table_name(col1,col2,col3)
SELECT ("val1", "val2", Numbers.Number-1)
FROM Numbers
WHERE Numbers.Number <= 10;
Também funcionaria quase 10 vezes mais rápido.