ORACLE中Merge into使用理解

本文深入解析SQL中的MERGEINTO语句,通过具体示例阐述如何利用MERGEINTO进行数据匹配与插入操作,提供一种灵活高效的数据管理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天突然看到新项目中有Merge into写法,查了下资料,把自己理解的记录下来:

SQL如下:

MERGE INTO   TABLE_A A
     USING   (    SELECT   '' || :id || '' ID FROM DUAL) B
        ON   (A.ID = B.ID)
WHEN MATCHED
THEN
   UPDATE SET
      A.TYPE = :TYPE, A.CYCLE = :cycle, A.UNIT = :unit, A.TIMES = :times
WHEN NOT MATCHED
THEN
   INSERT              (ID,
                        NAME,
                        TYPE,
                        TIMES,
                        STATUS)
       VALUES   (:id,
                 :NAME,
                 :TYPE,
                 :times,
                 DEFAULT)


MERGE INTO 要操作的表(A),USING关联表(B),ON两表之间的关系(A.ID = B.ID),根据两个表的id来进行匹配;

WHEN MATCHED   --若匹配到记录
THEN     

UPDATE SET A.TYPE = :TYPE, A.TIMES = :times   --修改A表,数据为:A、B表匹配到的记录(A.ID = B.ID)

WHEN NOT MATCHED  -- 若未匹配到记录

THEN

--插入新的记录到A表中

   INSERT              (ID,
                        NAME,
                        TYPE,
                        TIMES,
                        STATUS)
       VALUES   (:id,
                 :NAME,
                 :TYPE,
                 :times,
                 DEFAULT)
大致理解为:SELECT * FROM TABLE_A A ,TABLE_B B WHERE A.ID = B.ID

判断查询是否有数据:有数据,修改查询出来的A表数据(若存在多条,应该会修改多条,未测试),没有数据则新插入一条记录到A表中


以上为个人理解,如理解有误,欢迎指出纠正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值