zukucode
主にWEB関連の情報を技術メモとして発信しています。

SQL MERGE文でSELECTした結果を使ってINSERTまたはUPDATEをする

SQL 別テーブルをSELECTした結果をそのままINSERTする方法SQL 別テーブルをSELECTした結果が存在すればその値を使用してUPDATEする方法で紹介したように、INSERTUPDATEをするときにSELECTした結果を使いたい場合があります。

SELECTした結果をINSERTまたはUPDATEしたいテーブルと結合して、データが存在していればUPDATE、なければINSERTしたい場合はMERGEを使用します。

MERGE INTO A
USING (
  --SELECT-INSERTのSELECTの部分
  SELECT
    COL1,
    COL2,
    COL3
  FROM B
) B
ON (
  A.COL1 = B.COL1 --結合条件
)
--既に登録されている場合は更新
WHEN MATCHED THEN
  UPDATE SET
    A.COL2 = B.COL2,
    A.COL3 = B.COL3
--登録されていない場合は新規登録
WHEN NOT MATCHED THEN
  INSERT (
    COL1,
    COL2,
    COL3
  ) VALUES (
    B.COL1,
    B.COL2,
    B.COL3
  );

INSERTのみ、UPDATEのみを設定することも可能です。

SELECTした結果をそのまま更新値として使うことができるので、SQL 別テーブルをSELECTした結果が存在すればその値を使用してUPDATEする方法で紹介したように、複雑なUPDATE文の代わりにMERGE文を使うという手もあります。


関連記事