MySQLでのFOREACHループを使用した複数の行の挿入


方法1: INSERT文を複数回実行する

INSERT INTO テーブル名 (カラム1, カラム2, ...) VALUES (値1, 値2, ...);
INSERT INTO テーブル名 (カラム1, カラム2, ...) VALUES (値1, 値2, ...);
-- 必要な分だけINSERT文を繰り返す

この方法では、挿入する行ごとに個別のINSERT文を実行します。行数が多い場合は手間がかかるため、他の方法を検討することをおすすめします。

方法2: INSERT文とSELECT文の組み合わせ

INSERT INTO テーブル名 (カラム1, カラム2, ...)
SELECT 値1, 値2, ...
UNION ALL
SELECT 値1, 値2, ...
UNION ALL
-- 必要な分だけSELECT文を繰り返す

この方法では、SELECT文で挿入する値を指定し、それをINSERT文で挿入します。UNION ALLを使用して複数のSELECT文を結合し、一度に複数の行を挿入することができます。

方法3: ストアドプロシージャを使用する

DELIMITER //
CREATE PROCEDURE プロシージャ名()
BEGIN
  -- ループ処理
  DECLARE 変数名 データ型;
  DECLARE カーソル CURSOR FOR SELECT カラム1, カラム2, ... FROM テーブル名;
  OPEN カーソル;
  ループ開始: LOOP
    FETCH カーソル INTO 変数名;
    IF @@FETCH_STATUS <> 0 THEN
      LEAVE ループ開始;
    END IF;
    -- INSERT文を実行
    INSERT INTO テーブル名 (カラム1, カラム2, ...) VALUES (変数名, ...);
  END LOOP;
  CLOSE カーソル;
END //
DELIMITER ;

この方法では、ストアドプロシージャを使用してループ処理を行います。カーソルを使用してテーブルからデータを取得し、取得したデータをINSERT文で挿入します。

これらはいくつかの一般的な方法ですが、他にもさまざまな方法があります。データの形式や処理の要件に応じて最適な方法を選択してください。