Oracle数据库中的MERGE INTO语句用于将数据合并(插入、更新或删除)到目标表。这个语句通常与USING子句一起使用,允许在一个SQL语句中对一个表同时执行插入和更新操作。
语法规则
MERGE INTO target_table tt -- 目标表
USING source_table st -- 关联表
ON (tt.id = st.id AND tt.age = st.age ) -- 是否唯一条件,可以是多个
WHEN MATCHED AND tt.name <> st.name THEN -- 1、满足条件--带额外条件
WHEN MATCHED THEN -- 2、满足条件-- 不带额外条件
UPDATE SET -- 执行更新操作,注意没有 表名 update set
tt.name = st.name ,
tt.age = st.age
[ WHEN NOT MATCHED THEN ] -- 3、不满足条件, 可选,非必须语句
INSERT (id, name) VALUES (st.id, st.name); -- 执行添加操作,注意没有表名 insert
示例:存在则更新,不存在则插入(Mybatis、使用List作为关联表)
MERGE INTO TEST_TABLE a
USING (
<foreach collection="list" item="item" open="" close="" separator="union all">
SELECT
#{item.id,jdbcType=VARCHAR} AS ID,
#{item.name,jdbcType=VARCHAR} AS NAME,
#{item.age,jdbcType=VARCHAR} AS AGE,
#{item.createBy,jdbcType=VARCHAR} AS CREATE_BY,
#{item.createTime,jdbcType=VARCHAR} AS CREATE_TIME
FROM DUAL
</foreach>
) b ON (a.ID = b.ID)
WHEN MATCHED THEN UPDATE SET a.NAME = b.NAME, a.AGE = b.AGE a.CREATE_BY = b.CREATE_BY ,a.CREATE_TIME = b.CREATE_TIME
WHEN NOT MATCHED THEN INSERT(a.ID,a.NAME,a.AGE,a.CREATE_BY,a.CREATE_TIME)
VALUES (b.ID,b.NAME,b.AGE,b.CREATE_BY,b.CREATE_TIME)
评论区