---写法示例:MERGE INTO bonuses d
USING (SELECT employee_id, salary, department_id
FROM hr.employees
WHERE department_id = 80) s
ON (d.employee_id = s.employee_id) /*匹配条件d.employee_id = s.employee_id */
WHEN MATCHED THEN /*当d 表中存在与S 对应数据时进行更新或删除*/
UPDATE
SET d.bonus = d.bonus + s.salary * 0.01 /*WHERE 只能出现一次,如果在这里加了WHERE, DELETE 后面的WHERE 就无效*/
DELETE
WHERE (s.salary > 8000) /*删除时,只更新s.salary>8000 时的数据*/
WHEN NOT MATCHED THEN /*当d 表中不存在与S 对应的数据时进行新增*/
INSERT
(d.employee_id, d.bonus)
VALUES
(s.employee_id, s.salary * 0.01)
WHERE (s.salary <= 8000) /*新增时,只更新s.salary <= 8000 时的数据,注意这里与前面不同,是d 表中不存在对应数据时才新增*/;需要注意以下几点:
① 语句是MERGE INTO bonuses,所以在这个语句里只能更改bonuses 的数据,不能改USING 后面那些表的数据。
② 更新、删除、插入这三个操作是同时进行的,不分先后。
③ 在MERGE INTO 语句里不能更新JOIN 列。
④ 注意上面的注释:当有DELETE 语句时,UPDATE 后面不能有WHERE 过滤条件。这时UPDATE 的范围是:匹配到的数据减去删除的数据。在本例中就是范围(d.employee_id= s.employee_id)减去范围(s.salary > 8000)。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




