如果在Oracle 有表value_dazong_index_mom_day(在table里存起来了),它所有字段值的更新依据表DZWWW_MOM(根据原始数据建立起的视图),这里假设这两张表的结构完全一样(事实上可以不一样,只需第一个表要更新的字段能匹配第二个表的字段,且两张表唯一索引对应即可,例如根据唯一id,对两张表其他字段进行匹配更新),其结构如下:
其中表DZWWW_MOM视图是依据原始数据进行计算的指标,并将计算好的指标按照该结构存到Tab中的表value_dazong_index_mom_day,原始数据每日更新,要求存到Tab表的指标也每日更新。
显然,DZWWW_MOM视图是依据原始数据计算的指标,它查询出的数据也是每日更新的,只需让Tab表依据该视图表更新即可,代码如下:
[sql] view plain copy
- 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.大宗钢铁价格指数环比)
学习依据: http://www.cnblogs.com/anzhao/p/5050555.html
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字段必须是主键或建立了唯一的索引
merge into应用:实现 无则insert插入,有则update更新,一条语句直接进行insert/update操作
merge ino语法:
MERGE INTO table1 alias1
USING (table2|view2|sub_query2) alias2
ON (join condition)
WHEN MATCHED THEN
UPDATE table1
SET col1 = col_val1,
col2 = col2_val
WHEN NOT MATCHED THEN
INSERT (column_list) VALUES (column_values);
-
--将总公司sstl的客户信息occ_file数据表和子公司sstl_dx的客户信息occ_file核对
-
--如果sstl_dx公司的客户信息和sstl不同,则依据sstl客户信息更新sstl_dx的客户信息
-
--如果sstl_dx公司没有,则将sstl的客户信息新增入sstl_dx公司
-
MERGE INTO sstl_dx.occ_file dx_occ
-
USING sstl.occ_file sstl_occ
-
ON(dx_occ.occ01 = sstl_occ.occ01)
-
WHEN MATCHED THEN
-
update
-
set dx_occ.occ02 = sstl_occ.occ02,
-
dx_occ.occ03 = sstl_occ.occ03,
-
dx_occ.occ04 = sstl_occ.occ04,
-
dx_occ.occ05 = sstl_occ.occ05,
-
...
-
where dx_occ.occacti = 'Y'
-
WHEN NOT MATCHED THEN
-
insert
-
values(sstl_occ.occ01,sstl_occ.occ02,sstl_occ.occ03,sstl_occ.occ04,sstl_occ.occ05,...)
-
where sstl_occ.occacti = 'Y';
本文转自:
https://blog.csdn.net/qq_40285302/article/details/79722146
https://blog.csdn.net/lansetiankong12/article/details/78652335