问题描述
在Oracle中,如果两张表的结构完全相同,那么新增的时候可以写成:insert into a select * from b;那么修改呢,如果想根据b表的数据来修改a表,有没有类似上面的语句啊,我的表结构上百个字段,我不想在存储过程中一个一个的使用set来完成,请大家帮忙,非常感谢!
解决方案
Oracle有个Merge Into非常好用好吧:Merge into A ausing(select b.xx,b.xxx from B)bon(a.xx=b.xx)when matched then update set a.xxx=b.xxxwhen not matched then insert (a.xx,a.xxx) values (b.xx,b.xxx)
解决方案二:
chensming 兄的这个应该可以 但是就是不知道效率的问题 第一句没问题 但是在COPY数据的时候 不知道执行效率 truncate table a; 然后 insert into a select * from b; update a set a.xxx = (select b.xxx from b where b.id = a.id) 也是可行
解决方案三:
不知道啊 所以说试试啊 不行就换一个么。。。例如 update A set a.name = (select b.name from B b where a.id = b.id) where exists (select 1 from B b where a.id = b.id);按道理是应该可以的。。。。。。。嚓 我还搜了下资料来着。。。。http://topic.csdn.net/t/20020828/09/976010.htmlhttp://topic.csdn.net/u/20080226/10/e9a7c1f4-42e6-4266-9c98-ecd17963bcd1.html
解决方案四:
truncate table a;然后 insert into a select * from b;
解决方案五:
这个。。。试试update a set a.xxx = (select b.xxx from b where b.id = a.id)