質問: ### 前提・実現したいこと 以下のようなテーブルがあり、 テーブル`users`にデータを挿入したいとします。 その際、 `companies.name` `users.name` を持っておりますが... `companies.name` に関しては テーブル`companies` から `companies.name` に対応する `companies.id` を取得(変換)して挿入する必要があるとします。 注意: companies.name / users.name は存在しない場合のみ挿入を行い、 既に存在する場合は 新たに挿入せず既存のデータを使用したいとします。 ``` テーブル companies id int(11) NO PRI 0 name varchar(255) NO UNI created_at timestamp NO CURRENT_TIMESTAMP updated_at timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP テーブル users id int(11) NO PRI 0 company_id int(11) YES name varchar(255) NO UNI created_at timestamp NO CURRENT_TIMESTAMP updated_at timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP ``` ### 現在の手順 1 テーブル`companies`にデータ挿入。 (insert igonore を使用し既にデータが存在するかしないかにかかわらず実行。) 2 テーブル`companies` から `companies.name`に対応する`companies.id`を取得。 3 テーブル`users`にデータ挿入。 (insert igonore を使用し既にデータが存在するかしないかにかかわらず実行。) **この方法では 3回 sqlを実行しています。** ### 現在試行中 23を insert文に selectを使用して組み合わせれないか試行中。 参考: **できれば 1文でできる方法を 例で挙げたテーブルで確認できるような 実際のsqlを含めて教えていただければ幸いです。**
回答: やることが定形の処理ならプロシージャやらトリガーでやれませんか? またidは自動計算ではなくなんらかの任意の法則でつけるのであれば 同時入力はあまり現実的ではないかと 制約条件としては煩雑になるだけなのであまりお勧めしませんが 外部制約キーとからめてやってもいいかもしれません