2014年3月7日

【Access】 あれば更新なければ追加


データベースを使ったシステムを開発しているとよく本テーブルからデータを抽出して、ワークテーブルで編集してまた本テーブルに格納するなんてことをやるんですが、そんなとき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;


結果はこのようになります。






スポンサーリンク