1、MERGE语句:将有条件更新、插入或者删除操作组合起来
比如有总公司员工表EMPLOYEE,子公司员工表MY_EMP
子公司可以使用MERGE通过维护MY_EMP来处理本地职员的更新跟总公司合并
MERGE INTO EMPLOYEE AS E --(1)
USING (SELECT EMPNO,FIRSTNAME,MIDINIT,LASTNAME,WORKDEPT,
PHOENO,HIREDATE,JOB,EDLEVEL,SEX,BIRTHDATE,SALARY
FROM MY_EMP) AS M --(2)
ON E.EMPNO = M.EMPNO --(3)
WHEN MATCHED THEN UPDATE SET (SALARY) = (M.SALARY) --(4)
WHEN NOT MATCHED THEN --(5)
INSERT (EMPNO,FIRSTNAME,MIDINIT,LASTNAME,WORKDEPT,
PHOENO,HIREDATE,JOB,EDLEVEL,SEX,BIRTHDATE,SALARY)
VALUES (M.EMPNO,M.FIRSTNAME,M.MIDINIT,M.LASTNAME,M.WORKDEPT,
M.PHOENO,M.HIREDATE,M.JOB,M.EDLEVEL,M.SEX,
M.BIRTHDATE,M.SALARY);
(1) 目标表
(2) 源表
(3) 匹配条件
(4) 匹配成功的操作
(5) 匹配失败的操作
2、使用注意事项(借鉴)
a、SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.DUAL
函数IDENTITY_VAL_LOCAL对于MERGE语句中的INSERT,不能像普通的INSERT语句那样返回最后一次插入数据库中的数据的ID值,对于这种情况,只能使用普通的INSERT语句。
b、WHEN MATCHED THEN
MATCHED的情况下,只有UPDATE和DELETE语句可以使用,不能使用INSERT语句。 WHEN NOTE MATCHED THEN
NOTE MATCHED的情况下,不能使用UPDATE和DELETE语句,只可以使用INSERT语句。 (有数据就更新或删除,无数据就插入)
c、WHEN [NOT] MATCHED AND ( ... AND ... OR ... ) THEN
除了使用默认的MATCHED/NOT MATCHED以外,还可以指定额外的判断条件,但与MATCHED并列的条件只能用AND,而AND里面可以使用AND和OR。
d、注意NULL与任何值比较的结果既不是TRUE也不是FALSE,结果永远都是NULL。
e、例外的数据
用MERGE语句INSERT的数据不能被MERGE的分支语句所操作。
f、UPDATE的赋值语法
UPDATE的有两种可用的赋值语法,一种是“column = ?[, column = ?] ...”,另一种是“(column, column ...) = (value, value ...)”。
3、几个例子(借鉴)
MERGE INTO project px
USING (SELECT 1 AS VAL FROM SYSIBM.DUAL WHERE 1 = 2) py
ON VAL = 1
WHEN MATHED THEN
SET MESSAGE_TEXT = 'love me';
WHEN NOT MATCHED THEN
SET MESSAGE_TEXT = 'love you';
结果:触发警告,不走matched 也不走 not matched
MERGE INTO project px
USING (SELECT 1 AS VAL FROM SYSIBM.DUAL WHERE 1 = 1) py
ON VAL = 1
WHEN MATHED THEN
SET MESSAGE_TEXT = 'love me';
WHEN NOT MATCHED THEN
SET MESSAGE_TEXT = 'love you';
结果:走matched MERGE INTO project px
USING (SELECT 1 AS VAL FROM SYSIBM.DUAL WHERE 1 = 1) py
ON VAL = 2 WHEN MATHED THEN
SET MESSAGE_TEXT = 'love me';
WHEN NOT MATCHED THEN
SET MESSAGE_TEXT = 'love you';
结果:走 not matched
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论