MySQL документи за Изявления за контрол на потока кажете:
Документи за Съхранени програми и изгледи кажете:
Така че изглежда, че можете да изпълнявате изричен цикъл само в рамките на съхранена процедура, функция или тригер.
В зависимост от това, което правите във вашия SQL израз, може да е приемливо да използвате таблица (или изглед) с числа (Създаване на "Таблица с числа" в mysql , MYSQL:Таблица с последователни номера ).
Ако вашата заявка е SELECT
и е добре да върнете резултата от вашия SELECT
10 пъти като един дълъг набор от резултати (за разлика от 10 отделни набора резултати) можете да направите нещо подобно:
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
Пример за INSERT
Препоръчвам ви да имате постоянна таблица с числа във вашата база данни. Полезно е в много случаи. Вижте връзките по-горе как да го генерирате.
Така че, ако имате таблица Numbers
с int
колона Number
със стойности от 1 до, да речем, 100K (както правя аз) и първичен ключ в тази колона, а след това вместо този цикъл:
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;
можете да напишете:
INSERT INTO table_name(col1,col2,col3)
SELECT ("val1", "val2", Numbers.Number-1)
FROM Numbers
WHERE Numbers.Number <= 10;
Освен това ще работи почти 10 пъти по-бързо.