SQL MERGE文でSELECTした結果を使ってINSERTまたはUPDATEをする
SQL 別テーブルをSELECTした結果をそのままINSERTする方法やSQL 別テーブルをSELECTした結果が存在すればその値を使用してUPDATEする方法で紹介したように、INSERTやUPDATEをするときに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文を使うという手もあります。