首页 新闻 会员 周边

如何用存储过程实现两个表同步?

0
悬赏园豆:10 [已解决问题] 解决于 2012-08-26 10:32

现在又两个表分别是A表( a ,b , c ,d , e ,f) B表(a,b,c,d)现在点击同步按钮,将A表的数据复制到B表,A,B两个同字段的,数据使用A表的数据(A,B当然通过主键关联),如果说A.a = B.a 剩下A表的数据要全部插入到B表!

问题补充:

需要用到存储过程

青雪落幕的主页 青雪落幕 | 初学一级 | 园豆:94
提问于:2012-08-03 17:17
< >
分享
最佳答案
0
邀月 | 高人七级 |园豆:25475 | 2012-08-08 12:16
其他回答(3)
0
insert into B(a,b,c,d)
select  T.a,T.b,T.c,T.d from
(select A.a,A.b,A.c,A.d from A
left join B on A.a=B.a) T
收获园豆:10
vinsonLu | 园豆:214 (菜鸟二级) | 2012-08-03 18:38

这样插入不对,因为里面有相同的主键,如果主键相同就把A表的数据覆盖B表,就是B表更新,这样插入不对

支持(0) 反对(0) 青雪落幕 | 园豆:94 (初学一级) | 2012-08-03 18:59
update set B b=A.b,c=A.c,d=A.d from A where B.a=A.a

insert into B(a,b,c,d) select A.a,A.b,A.c,A,d from A where A.a not in(select a from B)
for c in (select a,b,c,d from A left join B on A.a=B.a) loop
     update B set b=c.b,c=c.c,d=c.d where a=c.a;
end loop;
insert into B(a,b,c,d) select A.a,A.b,A.c,A,d from A where A.a not in(select a from B);
支持(0) 反对(0) vinsonLu | 园豆:214 (菜鸟二级) | 2012-08-06 12:58
0

可以用Merge  有就更新 没有就插入

gunsmoke | 园豆:3592 (老鸟四级) | 2012-08-06 07:59
0
update set B b=A.b,c=A.c,d=A.d from A where B.a=A.a

insert into B(a,b,c,d) select A.a,A.b,A.c,A,d from A where A.a not in(select a from B)
for c in (select a,b,c,d from A left join B on A.a=B.a) loop
     update B set b=c.b,c=c.c,d=c.d where a=c.a;
end loop;
insert into B(a,b,c,d) select A.a,A.b,A.c,A,d from A where A.a not in(select a from B);
青雪落幕 | 园豆:94 (初学一级) | 2012-08-26 10:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册