MySQL-dokument på Flödeskontrolluttalanden säg:
Dokument på Lagrade program och vyer säg:
Så det ser ut som att du bara kan köra en explicit loop inom en lagrad procedur, funktion eller trigger.
Beroende på vad du gör i din SQL-sats kan det vara acceptabelt att använda en tabell (eller vy) med tal (Skapa en "Numbers Table" i mysql , MYSQL:Sequential Number Table ).
Om din fråga är en SELECT
och det är OK att returnera resultatet av din SELECT
10 gånger som en lång resultatuppsättning (i motsats till 10 separata resultatuppsättningar) kan du göra något så här:
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
Exempel för INSERT
Jag rekommenderar att du har en permanent tabell med nummer i din databas. Det är användbart i många fall. Se länkarna ovan hur du genererar det.
Så om du har en tabell Numbers
med int
kolumn Numbers
med värden från 1 till, säg, 100K (som jag gör), och primärnyckel i denna kolumn, istället för denna 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;
du kan skriva:
INSERT INTO table_name(col1,col2,col3)
SELECT ("val1", "val2", Numbers.Number-1)
FROM Numbers
WHERE Numbers.Number <= 10;
Det skulle också fungera nästan 10 gånger snabbare.