| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2033 人关注过本帖
标题:两表合并比较优化
只看楼主 加入收藏
kamishiro
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-3-21
结帖率:50%
收藏
 问题点数:0 回复次数:1 
两表合并比较优化
我想合并两张表,上次数据A和这次数据B一样的标记为N,A表有B表没有,就插入B表,标记为X,A表没有B表有,就标记为Y
新表就是A的表的X+B表的N和Y,并需要有标记

程序代码:
UPDATE tbl_old SET 变动=''
UPDATE tbl_new SET 变动=''
update c set c.变更='N' from tbl_new c,tbl_old d
where c.产品=d.产品 AND c.国家=d.国家 and c.商户=d.商户 and c.批次=d.批次  and (ABS(c.金额-d.金额))<=0.1  AND c.进货日期=d.进货日期 AND c.货币='RMB' AND d.货币='RMB'

update d set d.变更='N' from tbl_new c,tbl_old d
where c.产品=d.产品 AND c.国家=d.国家 and c.商户=d.商户 and c.批次=d.批次  and (ABS(c.金额-d.金额))<=0.1  AND c.进货日期=d.进货日期 AND c.货币='RMB' AND d.货币='RMB'

UPDATE tbl_old SET 变动='X' WHERE 变更<>'N'
UPDATE tbl_new SET 变动='Y' WHERE 变更<>'N'
insert into tbl select * from (select * from tbl_old where 变更='X' union all selelct * from tbl_new) a



数据量有几十万条,就很慢,我用merge好像也是很慢
程序代码:
MERGE INTO tbl_new c
USING tbl_old d
ON c.产品=d.产品 AND c.国家=d.国家 and c.商户=d.商户 and c.批次=d.批次  and (ABS(c.金额-d.金额))<=0.1  AND c.进货日期=d.进货日期 AND c.货币='RMB' AND d.货币='RMB'
WHEN MATCHED
THEN UPDATE SET c.变动='N'
WHEN NOT MATCHED 
THEN INSERT VALUES(d.[   ] ,d.产品,d.国家 ,d.商户,d.批次,d.进货日期,d.货币,d.金额,d.变动);



不知道大神有没有优化的方法,谢谢了

[此贴子已经被作者于2017-11-1 23:34编辑过]

搜索更多相关主题的帖子: SET 产品 AND 金额 日期 
2017-11-01 23:33
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:995
专家分:4966
注 册:2013-2-16
收藏
得分:0 
一共四个update ,一个insert 语句,自然效率就下来了。
前面两个 update c set c.变更='N' 似乎有点重复,直接把相同部分先 insert to tbl 岂不是省了一次遍历?
后面还有两次 update,一次是update c set c.变更='Y' ,一次是 update c set c.变更='X' ,
这两次又得占用相当资源吧 ?

可以尝试用一到两句insert 来解决 。

具体语句就不写了,并不难。
2017-11-02 14:49
快速回复:两表合并比较优化
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045416 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved