merge into解决数据更新问题

业务场景,需要根据一个表更新另一个表的数据,存在则更新。

MERGE语句是SQL中的一种强大的操作,它允许你在单个语句中同时执行插入、更新或删除操作,这依据是数据是否已经存在于目标表中。这个语句特别适用于有条件的同步两个表的情况,比如根据一个表的数据来更新另一个表,如果不存在则插入,或者存在特定条件时删除记录。Oracle数据库支持MERGE语句,以下是其基本语法结构:

MERGE INTO 目标表 USING 源表
ON (合并条件)
WHEN MATCHED THEN
    UPDATE SET 列1 = 值1, 列2 = 值2, ...
    DELETE WHERE 删除条件
WHEN NOT MATCHED THEN
    INSERT (列1, 列2, ...) VALUES (值1, 值2, ...);
  • 目标表:你想要更新或插入数据的表。
  • 源表:包含新数据的表,可以是实际的表,也可以是一个子查询结果。
  • 合并条件:用于匹配目标表和源表中的行。通常,这会是一个等式条件,比如target_table.id = source_table.id
  • WHEN MATCHED THEN:如果合并条件匹配,执行的操作。通常是一个UPDATE操作,但你也可以指定一个DELETE操作,如果你想要在满足特定条件时删除匹配的行。
  • WHEN NOT MATCHED THEN:如果合并条件不匹配,执行的操作,通常是一个INSERT操作。

这是一个具体例子,假设我们有两个表:employees(目标表)和new_employees(源表)。我们想要根据new_employees中的数据更新employees中的记录,如果employees中没有相应的记录,则插入新记录。

MERGE INTO employees e
USING new_employees ne
ON (e.employee_id = ne.employee_id)
WHEN MATCHED THEN
    UPDATE SET e.name = ne.name, e.salary = ne.salary
WHEN NOT MATCHED THEN
    INSERT (employee_id, name, salary) VALUES (ne.employee_id, ne.name, ne.salary);

这个例子中,如果employees表中有与new_employees表中employee_id相匹配的记录,则更新这些记录的namesalary。如果没有匹配的记录,那么将从new_employees表中插入新记录到employees表中。

posted @ 2024-02-23 17:11  真哩迈  阅读(112)  评论(0)    收藏  举报