Oracle でテーブル結合してMERGEするサンプル
環境
Oracle 12.2.0.1.0
書式
MERGE INTO テーブル1
USING テーブル2
ON 結合条件
WHEN MATCHED THEN
UPDATE構文
WHEN NOT MATCHED THEN
INSERT構文;
MERGE INTO テーブル1
USING テーブル2
ON 結合条件
WHEN MATCHED THEN
UPDATE構文
WHEN NOT MATCHED THEN
INSERT構文;
MERGE INTO テーブル1 USING テーブル2 ON 結合条件 WHEN MATCHED THEN UPDATE構文 WHEN NOT MATCHED THEN INSERT構文;
使用例
MERGE INTO USER_TBL AA
USING (
SELECT
UID,
ADDR,
FLG
FROM DEP_TBL
)BB
ON (AA.UID = BB.UID)
-- 条件に一致(テーブル名は記述しない)
WHEN MATCHED THEN
UPDATE SET
FLG = '更新'
-- 条件に一致しない(テーブル名は記述しない)
WHEN NOT MATCHED THEN
INSERT
(UID,
ADDR,
FLG
)
VALUES
(
BB.UID,
BB.ADDR,
'挿入'
);
MERGE INTO USER_TBL AA
USING (
SELECT
UID,
ADDR,
FLG
FROM DEP_TBL
)BB
ON (AA.UID = BB.UID)
-- 条件に一致(テーブル名は記述しない)
WHEN MATCHED THEN
UPDATE SET
FLG = '更新'
-- 条件に一致しない(テーブル名は記述しない)
WHEN NOT MATCHED THEN
INSERT
(UID,
ADDR,
FLG
)
VALUES
(
BB.UID,
BB.ADDR,
'挿入'
);
MERGE INTO USER_TBL AA USING ( SELECT UID, ADDR, FLG FROM DEP_TBL )BB ON (AA.UID = BB.UID) -- 条件に一致(テーブル名は記述しない) WHEN MATCHED THEN UPDATE SET FLG = '更新' -- 条件に一致しない(テーブル名は記述しない) WHEN NOT MATCHED THEN INSERT (UID, ADDR, FLG ) VALUES ( BB.UID, BB.ADDR, '挿入' );
説明
テーブル: USER_TBL DEP_TBL
判定条件:テーブル「USER_TBL」の「UID」とテーブル「DEP_TBL」の「UID」の比較
条件が一致する場合は、when matched thenが実行され、テーブルUSER_TBL をupdateします
条件が一致しない場合、when not matached thenが実行され、テーブルUSER_TBLをinsertします