取目标表和源表中的数据 进行比对:
常规操作是:如果满足on条件,用源表中的数据去更新目标表;如果不满足,则将源表中的数据插入目标表。
当然可以|有多种方案:
1.常规操作
2.只update或只insert
3.带条件的update或待条件的insert
4.全插入insert
5.带delete的update
语法
merge into table_a --目标表
using table_b --源表
on(table_a.条件字段1=table_b.条件字段1 and table_a.条件字段2=table_a.条件字段2 and ....)--关联条件
when MATCHED then update set table_a .更新字段=table_b.字段
when NOT MATCHED then insert( 字段1,字段2...)values(value1,value2..)
---此处insert后面的字段是目标表中的,values值是来源与源表中的
源表table_b即可以是表,也可以是临时表,还可以是 临时查询出的数据
案例
merge into t_member a --目标表
using (select gw.* from gsp_new_obj_bod_wtl gw left join t_member t on t.id=gw.m_mid left join t_member_nif mn on gw.zobj_cd=mn.zobj_cd where gw.zstatus_id=1 and mn.zobj_cd ) gw --源表
on (a.id=gw.m_mid and gw.is_syn = 0) ---匹配条件
when MATCHED and ISNULL(gw.ver,0)>ISNULL(a.ver2,0)
then update set ---匹配通过执行update
a.email=gw.zemail,
a.mname=gw.zlinkman,
a.contacts=gw.zlinkman,
........
when NOT MATCHED then ----匹配失败 执行insert
insert(mid,licenseno,orgname,......)
values(gw.m_mid,gw.zz_xkz_code,gw.zdesc,......);