如果在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字段必须是主键或建立了唯一的索引