SQLで初期データを作成したいというのは、よくあるケースかなと思います。
例えば全ての企業(companies)に対して初期ユーザー(users)を1件登録する必要があるとします。企業とユーザーは1対多の関係にあり、以下のようにINSERT
とSELECT
を組み合わせることで簡単に全ての企業に対して初期ユーザーの追加が完了します。
企業一覧
postgres=# SELECT * FROM companies; id | name ----+------ 1 | A社 2 | B社 3 | C社 (3 rows)
各企業に初期ユーザーを追加
INSERT INTO users (name, company_id) SELECT '初期ユーザー', companies.id FROM companies ; postgres=# SELECT * FROM users; id | name | company_id ----+--------------+------------ 1 | 初期ユーザー | 1 2 | 初期ユーザー | 2 3 | 初期ユーザー | 3 (3 rows)
ではSELECT
の実行結果から複数のデータを複数INSERT
するにはどうすれば良いでしょうか。
先ほどの例でいうと、初期ユーザとして「岡部・椎名・橋田」を登録するにはどのようなクエリを記述すれば良いでしょうか。自分が「SELECT
INSERT
複数行」といったワードで調べた限り、この問題を解決する方法を紹介している方を発見することはできませんでした。