sql优化 同步数据

sql 优化之前

<!-- 更新机构 用于同步"机构和用户"的数据  -->
<update id="updateOrgData"> 
   update org_info o set (o.org_name, o.parent_org_id)
= (select v.org_name, v.parent_org_id
from v_cc_org_info v where o.org_id = v.org_id)
where o.org_id in (select org_id from v_cc_org_info)
</update>

<!-- 新增机构 用于同步"机构和用户"的数据 -->
    <insert id="insertOrgData" parameterType="roleInfo">
    insert into org_info(org_id,org_name, parent_org_id, org_code)
select org_id,org_name, parent_org_id, org_id
from V_CC_ORG_INFO v
where not exists (select * from org_info o where o.org_id = v.org_id)
    </insert>

<!-- 更新用户 用于同步"机构和用户"的数据 -->
<update id="updateUserData"> 
update user_info u
    set (u.login_name, u.last_name, u.password, u.can_login, u.data_org, u.org_id, u.email)
= (select v.login_name, v.last_name, v.password, is_active, v.data_org, v.org_id, v.email_addr
from v_cc_user_info v where u.user_id = v.user_id)
where u.user_id in (select user_id from v_cc_user_info)
</update>

<!-- 新增用户 用于同步"机构和用户"的数据 -->
<insert id="insertUserData" parameterType="roleInfo">
    insert into user_info(user_id,login_name, last_name, password, can_login, data_org, org_id, email)
select user_id,login_name, last_name, password, is_active, data_org, org_id, email_addr
from V_CC_USER_INFO v
where not exists (select * from user_info u where u.user_id = v.user_id)
    </insert>


之后:
<!-- 更新用户 用于同步"机构和用户"的数据 -->
 merge into user_info u
  using (select v.user_id, v.login_name, v.last_name, v.password, is_active, v.data_org, v.org_id, v.email_addr
                from v_cc_user_info v ) v 
  on ( u.user_id = v.user_id)
  when matched then
    update set u.login_name = v.login_name, u.last_name= v.last_name, u.password=v.password,
     u.can_login=v.is_active, u.data_org=v.data_org, u.org_id=v.org_id, u.email= v.email_addr
  when not matched then
    insert (user_id,login_name,last_name,password,can_login,data_org,org_id,email)
    values (v.user_id, v.login_name, v.last_name, v.password, is_active, v.data_org, v.org_id, v.email_addr )

<!-- 更新机构 用于同步"机构和用户"的数据  -->
  merge into org_info u
  using (select  v.org_id,v.org_name, v.parent_org_id
from v_cc_org_info v ) v 
  on ( u.org_id = v.org_id)
  when matched then
    update set u.org_name = v.org_name, u.parent_org_id= v.parent_org_id
  when not matched then
    insert (org_id,org_name, parent_org_id, org_code)

    values ( v.org_id,v.org_name, v.parent_org_id, v.org_id )


能匹配到则更新 不能则插入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值