免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1896 | 回复: 9
打印 上一主题 下一主题

请教比较复杂的sql操作 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-01 17:16 |只看该作者 |倒序浏览
我有a表和b表(a表比较大,上千万条记录,b表有十几万条记录)
两张表表结构相同.都用prim_field做为主键.
现在想把b表中的记录插入到a表中,如果prim_field列不同的话,就直接插入.
prim_field列相同的话,就把a表中的相应记录删掉,再将b表中对应的记录插入
到a表中.
请教该怎么写sql语句?

论坛徽章:
0
2 [报告]
发表于 2005-12-01 18:09 |只看该作者
分二步,先删除掉a表相同的,在新增

论坛徽章:
0
3 [报告]
发表于 2005-12-02 08:56 |只看该作者
我自己写了一段sql语句:
1.处理prim_field不同时:
select * from b where b.prim_field not in (select prim_field from a)
into temp temp1;
insert into a select * from temp1;
2.处理prim_field相同时:
select * from b where b.prim_field in (select prim_field from a)
into temp temp2;
delete from a where a.prim_field in (select prim_field from temp2);
insert into a select * from temp2;
大家看看,不知道对不对,另外由于我的a表很大,上面的做法时间上可能很长,
有没有更快的方法?谢谢各位大侠。

论坛徽章:
0
4 [报告]
发表于 2005-12-02 13:25 |只看该作者
这个问题我曾经遇到过,经过几次修改,我使用如下的语句解决:
select A.* from A, B where A.prim_field = B.prim_field into temp t1;
delete from A where prim_field in(select prim_field from t1);
insert into A select * from t1;

论坛徽章:
0
5 [报告]
发表于 2005-12-02 15:58 |只看该作者
2步走:

  1. DELETE FROM a
  2. WHERE prim_filed IN ( SELECT prim_field FROM b )
  3. ;
  4. INSERT INTO a
  5. SELECT * FROM b
  6. ;
复制代码

论坛徽章:
0
6 [报告]
发表于 2005-12-02 23:02 |只看该作者
xjfirst ,如果在A表中如果不存在A.prim_field = B.prim_field ,那insert into A select * from t1不就不成立了

论坛徽章:
0
7 [报告]
发表于 2005-12-02 23:19 |只看该作者
如果用游标的方法对B表进行逐行扫描,再和A表的内容进行比较,遇到和A表相同的,就删掉A表的记录,插入记录,遇到不相同的就直接插入,这样会不会好一些

论坛徽章:
0
8 [报告]
发表于 2005-12-03 10:54 |只看该作者
4楼的方法好像还漏了一步
insert into A select * from B where b. prim_field  not IN ( SELECT prim_field FROM t1 )
sharpen 该用户已被删除
9 [报告]
发表于 2005-12-03 11:38 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2005-12-03 17:35 |只看该作者
4楼正解。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP