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 |