MySQL-Dokumentation zu Flow Control Statements sagen:
Dokumente zu Gespeicherte Programme und Ansichten sagen:
Es sieht also so aus, als könnten Sie eine explizite Schleife nur innerhalb einer gespeicherten Prozedur, Funktion oder eines Triggers ausführen.
Je nachdem, was Sie in Ihrer SQL-Anweisung tun, kann es akzeptabel sein, eine Tabelle (oder Ansicht) mit Zahlen zu verwenden (Eine "Zahlentabelle" in mysql erstellen , MYSQL:Sequenzielle Nummerntabelle ).
Wenn Ihre Abfrage ein SELECT
ist und es ist in Ordnung, das Ergebnis Ihres SELECT
zurückzugeben 10 Mal als eine lange Ergebnismenge (im Gegensatz zu 10 separaten Ergebnismengen) können Sie etwa so vorgehen:
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
Beispiel für INSERT
Ich empfehle, eine feste Zahlentabelle in Ihrer Datenbank zu haben. Es ist in vielen Fällen nützlich. Sehen Sie sich die obigen Links an, um es zu generieren.
Wenn Sie also eine Tabelle Numbers
haben mit int
Spalte Number
mit Werten von 1 bis, sagen wir, 100K (wie ich es tue) und Primärschlüssel auf dieser Spalte, dann statt dieser Schleife:
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;
Sie können schreiben:
INSERT INTO table_name(col1,col2,col3)
SELECT ("val1", "val2", Numbers.Number-1)
FROM Numbers
WHERE Numbers.Number <= 10;
Es würde auch fast 10-mal schneller funktionieren.