0

シナリオは次のとおりです。2つのテーブルと2つの一時テーブルがあります。ユーザーデータを公式テーブルに挿入する前に、一時テーブルに挿入してチェックを実行させます。company会社情報のあるテーブルcontactと連絡先情報のあるテーブルがあります。テーブルには、テーブルの外部キーインデックスであるcontactというフィールドがあります。company_idcompany

一時テーブルも同じように設定されます。

私は次のようなことをしたい:INSERT INTO company () SELECT * FROM temp_company;そしてINSERT INTO contact () SELECT * FROM temp_contact

私の質問は、このようなステートメントを使用して、外部キーをからテーブルtemp_companyに新しく挿入されたIDに転送するにはどうすればよいですか?companyそれを行う方法はありますか?

現在私は:

  1. 一時的な行をつかむ
  2. 一つずつ行って挿入します
  3. 最後の挿入IDを取得する
  4. その後、新しい最後の挿入IDで連絡先を挿入します

それが最も効率的な方法かどうかはわかりません。ありがとう!

4

1 に答える 1

0

両方のテーブルに同じ数の列がある場合、そこにある構文を使用できるはずですか?を取り出すだけ()です。重複する主キーがないことを確認してください。

INSERT INTO company SELECT * FROM temp_company;
INSERT INTO contact SELECT * FROM temp_contact;

挿入する列を具体的に指定することもできます。これにより、新しいIDとして挿入する列を正確に指定できます。

INSERT INTO company (`ID`,`col_1`,...,`last_col`) SELECT `foreign_key_col`,`col_1`,...,`last_col` FROM temp_company;
INSERT INTO contact (`ID`,`col_1`,...,`last_col`) SELECT `foreign_key_col`,`col_1`,...,`last_col` FROM temp_contact;

正しい列数を選択していることを確認してください。

于 2012-04-10T19:49:37.243 に答える