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相匹配的记录,则更新这些记录的name和salary。如果没有匹配的记录,那么将从new_employees表中插入新记录到employees表中。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号