• oracle的merge语法


    merge into trade.ttradeseat a
    using trade.bs_zrt_tradeseat b
    on (a.L_FUND_ID = b.l_Fund_Id and a.l_basecombi_id = b.l_basecombi_id and a.vc_seat_id = b.vc_seat_id and a.c_market_no = b.c_market_no)
    when not matched then
    insert
    (L_FUND_ID, L_BASECOMBI_ID, VC_SEAT_ID, C_MARKET_NO, c_trade)
    values
    (b.L_FUND_ID, b.L_BASECOMBI_ID, b.vc_seat_id, b.c_market_no, b.c_trade);

    merge语法是根据源表对目标表进行匹配查询,匹配成功时更新,不成功时插入。

    其基本语法规则是

    merge into 目标表 a

    using 源表 b

    on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)  

    when matched then update set a.更新字段=b.字段

    when  not macthed then insert into a(字段1,字段2……)values(值1,值2……)

    变种写法①,只更新:

    merge into 目标表 a

    using 源表 b

    on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)  

    when matched then update set a.更新字段=b.字段,a.更新字段2=b.字段2……

    变种写法②,只插入:

    merge into 目标表 a

    using 源表 b

    on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)  

    when  not macthed then insert into a(字段1,字段2……)values(值1,值2……)

    注:条件字段不可更新

    对于Oracle来说,merge是9i新增的语法,在10g进行了一些增强,如下:

    测试环境:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

    ①条件操作:

    merge into 目标表 a

    using 源表 b

    on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)  

    when matched then update set a.更新字段=b.字段  where 限制条件

    when  not macthed then insert into a(字段1,字段2……)values(值1,值2……) where 限制条件

    举例:

    merge into test_merge a
    using test b
    on(a.no=b.no)
    when matched then update set a.no2=b.no2 where a.no<>1
    when not matched then insert values(b.no,b.no2)  where a.no<>100

    当然也支持变种①②的写法

    ②删除操作

    merge into 目标表 a

    using 源表 b

    on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)  

    when matched then update set a.更新字段=b.字段

    delete where b.字段=xxx

    举例:

    merge into test_merge a
    using test b
    on(a.no=b.no)
    when matched then update set a.no2=b.no2 where a.no<>1
    delete
    where b.no=14

    备注:删除动作针对的也是目标表,并且必须在语句最后

    基本上merge的用法就是以上这些,建议平常可以多用,比单独的update+insert的方式效率要更高,尤其是on条件下有唯一索引的时候,效率更高

  • 相关阅读:
    Python--day72--ajax简介
    Python基础1 介绍、基本语法
    10-Python-字符编码
    09-Python-集合
    07-Python-字符串操作
    99-Python-深浅拷贝
    06-Python-字典
    05-Python-判断语句
    04-Python-元组
    03-Python-操作列表
  • 原文地址:https://www.cnblogs.com/timlong/p/11568745.html
Copyright © 2020-2023  润新知