ねこさんとへびさんの新人技術ブログ

新人エンジニアのねこさんとへびさんの、技術向上のためのブログです。

Tips!別テーブルからレコードを抽出しインサートする - MySQL

別テーブルのレコードを抽出し一括登録する

VALUES句の代わりにSELECT句を使用する。
INTO句で指定したカラムの数と、SELECT文で表示するカラム数を一致させること

INSERT INTO table1 (column1, column2, column3)
SELECT column4, column5, column6
FROM table2
WHERE ...


Ex.
ユーザーがカートに入っている商品を購入したら、カートの中身をもとに購入ログのレコードを挿入する場合。

cartテーブル

id ユーザーID 商品コード 個数 サイズ ステータス
1 1102 PD0001 3 S wait
2 1102 ZA0021 1 S cancel
3 325 ZA0199 1 S cancel

purchase_logテーブル

id ユーザーID 商品コード 個数 サイズ

※各テーブルのidカラムがkeyであり、autoincrementが設定されている


以下のSQLを実行すると

INSERT INTO purchase_log (user_id, product_cd, num, size)
SELECT user_id, product_cd, purchase_num, size
FROM cart
WHERE  user_id = 1102 AND status = 'wait';

条件にマッチするレコードがpurchase_logテーブルに挿入される
purchase_logテーブル

id ユーザーID 商品コード 個数 サイズ
1 1102 PD0001 3 S