Dokumenty MySQL na Prohlášení o řízení toku řekni:
Dokumenty na Uložené programy a zobrazení řekni:
Takže to vypadá, že můžete spustit explicitní smyčku pouze v rámci uložené procedury, funkce nebo triggeru.
V závislosti na tom, co děláte v příkazu SQL, může být přijatelné použít tabulku (nebo zobrazení) čísel (Vytvoření "tabulky čísel" v mysql , MYSQL:Tabulka sekvenčních čísel ).
Pokud je váš dotaz SELECT
a je v pořádku vrátit výsledek vašeho SELECT
10krát jako jedna dlouhá sada výsledků (na rozdíl od 10 samostatných sad výsledků) můžete udělat něco takového:
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
Příklad pro INSERT
Doporučuji mít ve své databázi stálou tabulku čísel. Je to užitečné v mnoha případech. Viz výše uvedené odkazy, jak jej vygenerovat.
Pokud tedy máte tabulku Numbers
s int
sloupec Number
s hodnotami od 1 do, řekněme, 100K (jako já) a primárním klíčem v tomto sloupci, pak místo této smyčky:
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;
můžete napsat:
INSERT INTO table_name(col1,col2,col3)
SELECT ("val1", "val2", Numbers.Number-1)
FROM Numbers
WHERE Numbers.Number <= 10;
Fungovalo by to také téměř 10krát rychleji.