MERGE=INSERT+UPDATE
レコードの新規作成と更新を1文で記述することができます。
やりたいこと
WKテーブル
EMP_CD(主キー) | EMP_NAME |
---|---|
E111111 | aaa |
E222222 | bbb |
TGTテーブル
EMP_CD(主キー) | EMP_NAME |
---|---|
E111111 | ddd |
⇒レコードのがすでに存在すれば更新、存在しなければ新規作成を行います。
実行結果は以下のようになります。
MERGE後TGTテーブル
EMP_CD(主キー) | EMP_NAME |
---|---|
E111111 | aaa |
E222222 | bbb |
コード
注意点
・INSERT、UPDATEにはテーブル名は記述しない
・UPDATEでは比較対象となるカラムは記載しない
test.sql
MERGE INTO tgt tgt
USING wk wk
ON tgt.emp_cd = wk.emp_cd
WHEN MATCHED THEN
UPDATE SET
tgt.emp_name = wk.emp_name
WHEN NOT MATCHED THEN
INSERT (tgt.emp_cd, tgt.emp_name)
VALUES (wk.emp_no, wk.emp_name)
;
UPDATEかINSERTのみ
MERGE文ではUPDATEまたはINSERTのみの実行も可能です。
以下の例を実行すると新規作成のみ行われます。
test.sql
MERGE INTO tgt tgt
USING wk wk
ON tgt.emp_cd = wk.emp_cd
WHEN NOT MATCHED THEN
INSERT (tgt.emp_cd, tgt.emp_name)
VALUES (wk.emp_no, wk.emp_name)
;
MERGE後TGTテーブル
EMP_CD(主キー) | EMP_NAME |
---|---|
E111111 | ddd |
E222222 | bbb |