【MySQL】SELECTした結果をINSERTするSQLの書き方
2019/04/02
以前、SELECTした結果でテーブルのレコードをUPDATEするSQLを紹介しましたが、今度は SELECTした結果を、新規のテーブルにINSERTするSQLを備忘録としてポストします。
SELECT結果をINSERTするSQL
今回もさっさと答えを書きましょう。
1 2 3 4 5 6 |
INSERT INTO table1 (col1, col2, ...) SELECT col1, col2, ... FROM table2; |
UPDATEと同じく、最終的に行いたい INSERT を先に書き、INSERT対象レコードを SELECT するという単純な構成。
なるほどですね。
今回のシチュエーション
ここで終わっても良いのですが、必要になった経緯など。
数万レコードを月次処理用のテーブルへインサートし、そのインサートされたレコードをJOINしてSELECTするという流れのなかで必要となってきた技術です。
全体としてなかなか重い処理ということもあり、月次処理用テーブルにもインデックスを張りたかったので、処理のたびに一旦 TRANCATE でテーブルを初期化してから、必要なレコードを放り込んでいく流れとしました。
もっと技術のある人はもう少しスマートな方法を採ると思うのですが、まぁ、そこは置いておきましょう(苦笑)
実例(に近い)SQL
monthly_datas が月次処理用のテーブルです。
そこに services テーブルから取得したレコード(service_id, service_name)をインサートする仕様です。
1 2 3 4 5 6 7 8 |
INSERT INTO monthly_datas (service_id, service_name) SELECT s.id AS 'service_id', s.name AS 'service_name' FROM services AS s WHERE s.delete_flg = 0; |
書くたびに思うのですが、SQLって便利ですよねぇ。