MERGE語法詳解

merge語法是根據源表對目標表進行匹配查詢,匹配成功時更新,不成功時插入。測試

其基本語法規則是索引

merge into 目標表 ait

using 源表 bio

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

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

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

變種寫法①,只更新:語法

merge into 目標表 a查詢

using 源表 btab

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條件下有惟一索引的時候,效率更高

相關文章
相關標籤/搜索