您当前的位置:首页 > 计算机 > 软件应用 > 数据库 > Oracle

Oracle实现一张表根据另一张表更新(有则更新无则插入)

时间:11-10来源:作者:点击数:

如果在Oracle 有表value_dazong_index_mom_day(在table里存起来了),它所有字段值的更新依据表DZWWW_MOM(根据原始数据建立起的视图),这里假设这两张表的结构完全一样(事实上可以不一样,只需第一个表要更新的字段能匹配第二个表的字段,且两张表唯一索引对应即可,例如根据唯一id,对两张表其他字段进行匹配更新),其结构如下:

其中表DZWWW_MOM视图是依据原始数据进行计算的指标,并将计算好的指标按照该结构存到Tab中的表value_dazong_index_mom_day,原始数据每日更新,要求存到Tab表的指标也每日更新。

显然,DZWWW_MOM视图是依据原始数据计算的指标,它查询出的数据也是每日更新的,只需让Tab表依据该视图表更新即可,代码如下:

merge into value_dazong_index_mom_day t1    
  
using DZWWW_MOM t2  
  
on(t1.日期=t2.日期)    
  
when matched then    
  
update set t1.大宗化工价格指数环比 = t2.大宗化工价格指数环比,  
           t1.浮法玻璃价格指数环比 = t2.浮法玻璃价格指数环比,   
           t1.水泥商品价格指数环比 = t2.大宗水泥价格指数环比,  
           t1.大宗有色价格指数环比 = t2.大宗有色价格指数环比,  
           t1.大宗钢铁价格指数环比 = t2.大宗钢铁价格指数环比  
when not matched then  
  
insert (日期,大宗化工价格指数环比,浮法玻璃价格指数环比,水泥商品价格指数环比,大宗有色价格指数环比,大宗钢铁价格指数环比) VALUES(t2.日期,t2.大宗化工价格指数环比,t2.浮法玻璃价格指数环比,大宗水泥价格指数环比,t2.大宗有色价格指数环比,t2.大宗钢铁价格指数环比)   

1)Oracle实现有则更新,无则插入

    使用MERGE INTO语句

    如下:已知传过来的参数三个 userid 、name 、sex.要求如果用户表(T_USER)中存在相同的userid则更新name和sex字段,如果用户表(T_USER)中不存在userid,则插入一条记录

    MERGE INTO T_USER T1 

    USING(SELECT userid AS id,name AS username,sex AS usersex FROM dual) T2

    ON(T1.userid=T2.id)

    WHEN MATCHED THEN

    update set t1.name=t2.username,t1.sex=t2.usersex

    WHEN NOT MATCHED THEN

    insert(userid,name,sex) VALUES(t2.id,t2.username,t2.usersex);

2)Mysql实现有则更新,无则插入

    MYSQL需要实现以上功能,需要怎么做呢?

    使用ON DUPLICATE KEY UPDATE语句

    已知传过来的参数三个 id 、username 、usersex 它们的值分别为: 1   张三  男.

    INSERT INTO T_USER(userid,name,sex) VALUES (id,username,usersex) ON DUPLICATE KEY UPDATE name=username,sex=usersex;

注意:如果在Mysql中使用这种形式,则要求在数据表中userid字段必须是主键或建立了唯一的索引

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门