質問: メインのテーブルAに、追加用テーブルBの内容を入れたいときに 複数の項目値で比較し、一致したときは、テーブルBの内容で置換し、 テーブルBに存在し、テーブルAに存在しないレコードについては、テーブルAに挿入したい REPLACEが 機能的には同じなのだが テーブルの中身を一度に指定して置換と挿入を同時に行えないのだろうか テーブルA key1 key2 data1 data2 1 1 aaaa bbbb 1 2 cccc dddd 1 4 eeee ffff 2 1 gggg hhhh 2 3 iiii jjjj テーブルB key1 key2 data1 data2 1 1 AAAA BBBB 1 3 MMMM NNNN 2 2 XXXX ZZZZ 2 3 LLLL SSSS これを置換挿入した結果 テーブルAの中身が key1 key2 data1 data2 1 1 AAAA BBBB 1 2 cccc dddd 1 3 MMMM NNNN 1 4 eeee ffff 2 1 gggg hhhh 2 2 XXXX ZZZZ 2 3 LLLL SSSS となるようにしたい 可能かどうか、可能な場合には、どのように記述すればよいか 教えてほしい よろしくお願いいたします
回答: key1, key2 は複数カラム主キーまたは複数カラムユニークキーが設定してあるとして、 **REPLACE 構文** ``` REPLACE INTO テーブルA SELECT * FROM テーブルB; ``` **動作確認サンプル** **ON DUPLICATE KEY UPDATE 構文** ``` INSERT INTO テーブルA SELECT * FROM テーブルB ON DUPLICATE KEY UPDATE data1=テーブルB.data1, data2=テーブルB.data2; ``` **動作確認サンプル** どちらも同じ結果になりますが、動作が異なります。 REPLACE構文はキーが一致する行を削除してから、挿入します。 ON DUPLICATE KEY UPDATE構文は、キーが一致する行は更新、なければ挿入します。