INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...
    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
          INSERT
          ... SELECT を利用すると、1
          つ、または複数のテーブルから多くの行をすばやく挿入することができます。例
          :
        
INSERT INTO tbl_temp2 (fld_id) SELECT tbl_temp1.fld_order_id FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
          次の条件は
          INSERT
          ... SELECT
          ステートメントを保持します。
        
              重複キー違反を引き起こす行を無視するために
              IGNORE
              を指定してください。
            
              DELAYED は
              INSERT
              ... SELECT と共に無視されます。
            
              INSERT
              ステートメントの対象テーブルはクエリーの
              SELECT 部の
              FROM
              節内に現れます。(これは MySQL
              の古いバージョンでは不可能でした)。この場合、MySQL
              は行を保持するために
              SELECT
              から一時テーブルを作成し、そして対象テーブルにそれらの行を挿入します。ただし、TEMPORARY
              テーブルを同じステートメント内で 2
              回参照することはできないため、t
              が TEMPORARY
              テーブルのときに INSERT
              INTO t ... SELECT ... FROM t
              を使用できない点は引き続き残ります
              (TEMPORARY Table Problems を参照)。
            
              AUTO_INCREMENT
              カラムは通常通り機能します。
            
              バイナリログが元テーブルを再作成するために利用できることを保障するために、MySQL
              は
              INSERT
              ... SELECT
              ステートメントへの並列挿入を許可しません。
            
現在は、サブクエリーの中で 1 つのテーブルに挿入し、同じテーブルから選択することはできません。
              SELECT と
              INSERT
              が同じテーブルを参照している場合のあいまいなカラム参照の問題を回避するには、SELECT
              部分で使用されている各テーブルの一意のエイリアスを指定し、その部分にあるカラム名を適切なエイリアスで修飾します。
            
          ON DUPLICATE KEY UPDATE
          の値部分の中で、SELECT
          部分の中で GROUP
          BY
          を利用しないかぎり、別のテーブル内でカラムの参照をすることができます。1
          つの副作用として、値の部分にある一意でないカラム名を修飾しなければならない点があります。
        

