SQL 高级语法 MERGE INTO

根据与源表相联接的结果,对目标表进行插入、更新、删除等操作。 例如,对目标表,如果源表存在的数据则更新,没有的则插入,就可以使用MEREG进行同步。

基本语法

复制代码
MERGE INTO target_table
USING source_table
ON condition
WHEN MATCHED THEN 
XXX
WHEN NOT MATCHED THEN 
XXX

这里的Source table 不限于单独的表格,也可以是子查询的内容

示例

复制代码
INSERT tbl_A (col, col2)
SELECT col, col2
FROM tbl_B
WHERE NOT EXISTS (SELECT col FROM tbl_A A2 WHERE A2.col = tbl_B.col);

上面的SQL是为了向 tbl_A 中插入 tbl_B 含有的,但是 tbl_A 不包含的col

改为MERGE可以写为

复制代码
MERGE INTO tbl_A  t  
    USING tbl_B v  
    ON t.col = v.col  
    WHEN MATCHED THEN   
        UPDATE SET y.c2 = v.c2  
    WHEN NOT MATCHED THEN  
        INSERT (col, col2) VALUES (v.c1, v.c2);

(这里为了展示更多的选项,加多了一句UPDATE)

当一个表需要依托于另一个表进行更新操作的时候,使用MERGE可以快捷的实现

相关推荐
不剪发的Tony老师9 小时前
Valentina Studio:一款跨平台的数据库管理工具
数据库·sql
重生之我要当java大帝9 小时前
java微服务-尚医通-编写医院设置接口下
java·开发语言·sql
杀气丶10 小时前
L2JBR - 修复数据库编码为UTF8
数据库·sql·oracle
冼紫菜10 小时前
[特殊字符] 深入理解 PageHelper 分页原理:从 startPage 到 SQL 改写全过程
java·后端·sql·mysql·spring
青山撞入怀111410 小时前
sql题目练习-子查询
java·数据库·sql
!if12 小时前
springboot mybatisplus 配置SQL日志,但是没有日志输出
spring boot·sql·mybatis
友善的鸡蛋19 小时前
项目中执行SQL报错oracle.jdbc.OracleDatabaseException: ORA-00942: 表或视图不存在
数据库·sql·oracle
Olrookie20 小时前
MySQL运维常用SQL
运维·数据库·sql·mysql·dba
星光一影1 天前
HIS系统天花板,十大核心模块,门诊/住院/医保全流程打通,医院数字化转型首选
java·spring boot·后端·sql·elementui·html·scss
啊吧怪不啊吧1 天前
初识SQL
服务器·数据库·sql