| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 589 人关注过本帖
标题:两表合并比较优化
只看楼主 加入收藏
kamishiro
Rank: 1
等 级:新手上路
帖 子:10
专家分: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编辑过]

2017-11-01 23:33
厨师王德榜
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:72
帖 子:455
专家分:1642
注 册: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.044616 second(s), 9 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved