フロー制御ステートメント に関するMySQLドキュメント 言う:
ストアドプログラムとビュー に関するドキュメント 言う:
したがって、ストアドプロシージャ、関数、またはトリガー内でのみ明示的なループを実行できるようです。
SQLステートメントで行うことによっては、数値のテーブル(またはビュー)を使用できる場合があります(mysqlでの「数値テーブル」の作成 、 MYSQL:連続番号テーブル )。
クエリがSELECT
の場合 SELECT
の結果を返すことはOKです 1つの長い結果セットの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倍高速に動作します。