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
文を使うという手もあります。