方法一:MERGE語句的語法
MERGE INTO 表名 USING 表名/視圖/子查詢 ON 連接條件 --多個條件注意()括起來 WHEN MATCHED THEN -- 當匹配得上連接條件時 更新、刪除操作 WHEN NOT MATCHED THEN -- 當匹配不上連接條件時 更新、刪除、插入操作
示例
MERGE INTO CAI_GRKMX a USING TMP_IMPHD b ON (a.SPID=b.SPID AND a.PIHAO=b.PIHAO AND instr(b.pihao,a.djbh)>0) WHEN MATCHED THEN UPDATE SET a.HDUID=b.MXUID,a.HDBZ=1; COMMIT;
來自網上更好的說明
MERGE INTO dept60_bonuses b USING ( SELECT employee_id, salary, department_id FROM hr.employees WHERE department_id = 60 ) e ON (b.employee_id = e.employee_id) -- 當符合關聯條件時 WHEN MATCHED THEN -- 將獎金為0的員工的獎金調整為其工資的20% UPDATE SET b.bonus_amt = e.salary * 0.2 WHERE b.bonus_amt = 0 -- 刪除工資大於7500的員工獎金記錄 DELETE WHERE (e.salary > 7500) -- 當不符合連接條件時 WHEN NOT MATCHED THEN -- 將不在部門為60號的,且不在dept60_bonuses表的用工信息插入,並將其獎金設置為其工資的10% INSERT (b.employee_id, b.bonus_amt) VALUES (e.employee_id, e.salary * 0.1) WHERE (e.salary < 7500)
方法二:作為多表級聯更新的另外一種寫法
UPDATE (SELECT a.HDUID,b.MXUID,HDBZ FROM CAI_GRKMX a INNER JOIN TMP_IMPHD b ON a.SPID=b.SPID AND a.PIHAO=b.PIHAO AND instr(b.pihao,a.djbh)>0 ) SET HDUID=MXUID,HDBZ=1