プログラミング

【SQL入門】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' 
        FROM   TBL_A A
        WHERE
          A.{key} = B.{key}
    )
  • TBL_A
IDNAMEPRICE
1トマト100
2にんじん150
3たまねぎ200
4なす250

-プログラミング
-