データベースを使ったシステムを開発しているとよく本テーブルからデータを抽出して、ワークテーブルで編集してまた本テーブルに格納するなんてことをやるんですが、そんなとき2つのテーブルを比較して、データがあれば更新なければ追加といったことをします。
例えば次のようなテーブルがあったとします。
T_Animals(本テーブル)
このテーブルからデータをワークテーブルに持ってきて、変更と追加を行ったとします。
W_Animals(ワークテーブル)
4:サル → 4:キツネザル に変更
9:カバを追加
この更新と追加を本テーブルに反映させるにはクエリで次のようにやります。
■あれば更新
UPDATE T_Animals AS T1 INNER JOIN W_Animals AS T2 ON T1.ID = T2.ID SET T1.AnimalName = T2.AnimalName;
■なければ追加
INSERT INTO T_Animals ( ID, AnimalName ) SELECT T2.ID, T2.AnimalName FROM W_Animals AS T2 LEFT JOIN T_Animals AS T1 ON T2.ID = T1.ID WHERE T1.ID Is Null;
この2つのクエリを実行してあげれば出来るのですが、
この2つの処理を1回の処理で実行させることも出来ます。
次のようにやります。
■更新と追加を1回でやる方法
UPDATE T_Animals AS T1 RIGHT JOIN W_Animals AS T2 ON T1.ID= T2.ID SET T1.ID = T2.ID, T1.AnimalName = T2.AnimalName;
結果はこのようになります。
スポンサーリンク