MySQL-dokumenter på Flowkontrolerklæringer sige:
Dokumenter på lagrede programmer og visninger sige:
Syntaks for sammensat erklæring
Så det ser ud til, at du kun kan køre en eksplicit loop inden for en lagret procedure, funktion eller trigger.
Afhængigt af hvad du gør i din SQL-sætning, kan det være acceptabelt at bruge en tabel (eller visning) af tal (Oprettelse af en "Numbers Table" i mysql , MYSQL:Sequential Number Table ).
Hvis din forespørgsel er en SELECT
og det er OK at returnere resultatet af din SELECT
10 gange som et langt resultatsæt (i modsætning til 10 separate resultatsæt) kan du gøre noget som dette:
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
Eksempel på INSERT
Jeg anbefaler at have en permanent tabel med tal i din database. Det er nyttigt i mange tilfælde. Se linkene ovenfor, hvordan du genererer det.
Så hvis du har en tabel Numbers
med int
kolonne Number
med værdier fra 1 til f.eks. 100K (som jeg gør), og primærnøgle på denne kolonne, så i stedet for denne sløjfe:
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;
du kan skrive:
INSERT INTO table_name(col1,col2,col3)
SELECT ("val1", "val2", Numbers.Number-1)
FROM Numbers
WHERE Numbers.Number <= 10;
Det ville også virke næsten 10 gange hurtigere.