★2022年最新★入門!SQLを使ってテーブル間で差分データをINSERTする方法

仕事でSQLで2つのテーブル間で差分のみを抽出してINSERTする必要があったので対応したメモを残しておきます。

対象者

  • 2つのテーブル間で差分をのみ取り込みたい人

差分にみINSERTするSQL

EXISTSを使うことで実現できます。

広告

SQLのサンプル

実際のSQLは以下のようになります。

INSERT INTO TBL_A  SELECT * FROM  TBL_B B WHERE NOT EXISTS(SELECT 'X'FROM TBL_A A  WHERE A.{key} = B.{key} )

解説

IDがKeyとなる二つのテーブルがあり3行目だけ異なるデータが存在しているとします。

  • TBL_A
IDNAMEPRICE
1トマト100
2にんじん150
3たまねぎ200
  • TBL_B
IDNAMEPRICE
1トマト100
2にんじん150
4なす250

NOT EXISTSでTBL_BからTBL_AのIDとが一致しない行を取得します。

  SELECT * FROM  TBL_B B WHERE NOT EXISTS(SELECT 'X'FROM TBL_A A  WHERE A.{key} = B.{key} )

今回の例ではTBL_Bに存在してTBL_Aに存在しないIDは4なので以下の行が取得できます。

IDNAMEPRICE
4なす250

取得した行をTBL_AにINSERTするので、 TBL_A に存在しない行がTBL_AにINSERTされるので結果として以下のようになります。

INSERT INTO TBL_A  SELECT * FROM  TBL_B B WHERE NOT EXISTS(SELECT 'X'FROMTBL_A A  WHERE A.{key} = B.{key} )
  • TBL_A
IDNAMEPRICE
1トマト100
2にんじん150
3たまねぎ200
4なす250