有以下表......
T1:
列名 A列 B列
数据 数据A 100
数据 数据A 100
数据 数据B 100
数据 数据A 100
数据 数据B 100
数据 数据A 100
数据 数据A 100*************************************
T2:
列名 A列 B列
数据 OX001 数据A
数据 OX002 数据B
*************************************
问题:
我想批量更新表T1,得出结果如下:
T1:
列名 A列 B列
数据 OX001 100
数据 OX001 100
数据 OX002 100
数据 OX001 100
数据 OX002 100
数据 OX001 100
数据 OX001 100------------------------------
鄂用以下的语句更新后,提示更新的数据太多。
update T1
set T1.A列=
(select T2.A列 from T2 where T2.B列=T1.A列)
但是,修改成这样后,可以。。
update T1
set T1.A列=
(select T2.A列 from T2 where T2.B列=T1.A列 and rounum<=1)
不过总感觉这样只限定下,会出现大数据的时候,更新遗漏的问题
求高手指点,谢谢
T1:
列名 A列 B列
数据 数据A 100
数据 数据A 100
数据 数据B 100
数据 数据A 100
数据 数据B 100
数据 数据A 100
数据 数据A 100*************************************
T2:
列名 A列 B列
数据 OX001 数据A
数据 OX002 数据B
*************************************
问题:
我想批量更新表T1,得出结果如下:
T1:
列名 A列 B列
数据 OX001 100
数据 OX001 100
数据 OX002 100
数据 OX001 100
数据 OX002 100
数据 OX001 100
数据 OX001 100------------------------------
鄂用以下的语句更新后,提示更新的数据太多。
update T1
set T1.A列=
(select T2.A列 from T2 where T2.B列=T1.A列)
但是,修改成这样后,可以。。
update T1
set T1.A列=
(select T2.A列 from T2 where T2.B列=T1.A列 and rounum<=1)
不过总感觉这样只限定下,会出现大数据的时候,更新遗漏的问题
求高手指点,谢谢
采用存储过程,使用循环,限制更新的条数,效率不是很高。。
方法二:
建立和目标表一样的结构的临时表(基于事务的临时表,保证主键一样),使用视图更新的操作。
update( select a.A列,b.A列 from t1 a,temp_t1 b where a.id=b.id) set a.A列=b.A列
方法三:
同样的使用临时表,根据插入产生的日志少于update的日志的办法,使用
truncate table t1;
create table t1 as select * from temp_t1;
列名 A列 B列
数据 OX001 数据A
数据 OX002 数据B
数据 OX003 数据B
数据 OX004 数据A
如果你T2中的数据是这样的 那么T1中的 '数据A' 要更新成哪个呢? 'OX001'或者'OX004'?
--你指的遗漏不明白是什么意思
--如果数据量大,建议还是采用临时表来更新update T1 set T1.A列=
(select T2.A列 from T2 where T2.B列=T1.A列 and rounum<=1)
where exists(select 1 from T2 where T2.B列=T1.A列 ) --加上这句,避免勿更新一些资料!
我本身T2表中T2.B列=T1.A列这个条件就应该是能保证只赛选一条数据出来的。
可是如果不用rounum<=1 用提示更新的数据太多,失败
update T1
set T1.A列=
(select T2.A列 from T2 where T2.B列=T1.A列)
where exists(select null from T2 where T2.B列=T1.A列)
1.create table tmp_t1 as
(select t1.列名,t1.B列.T2.A列 from T2,t1 where T2.B列=T1.A列).
2。然后在tmp_t1上建立主键和t1表的一样
3.
update( select a.A列,b.A列 from t1 a,temp_t1 b where a.id=b.id) set a.A列=b.A列
在insert into a select from 视图(临时表)