ORA-01407 cannot update 。。。 TO NULL

 

我遇到下面的这种情况:

现在A库中有会员表,会员卡表,会员与卡的关系表,B库中也有这三个表,两个库的会员表的手机号是一对一的关系,是相等的,主键不相等。

想用A库中这三个表的主键(会员id,卡id,关系表中的会员id与卡id)去更新B库中对应的三个表的主键,唯一的关系就是会员的手机号一样。

 

我开始老是想通过一个sql语句解决,通过会员的手机号更新一下就可以了,但没写出来,后来咨询了下采用下面的这个办法靠谱。

完成这件事:建了两个中间表,一个是用手机号做关联将两个库的会员id保存做一个临时表,之后用临时表去更新B库里面的会员id,

过程中遇到了下面的问题ORA-01407 cannot update 。。。 TO NULL,我的sql是update t_member set id=(select mem_mid.mid from mem_mid  where mem_mid.mid=t_member.id);

查了一下资料,参考了这篇文章:http://space.itpub.net/7199859/viewspace-430077,一下子就解决了;另外一个中间表,是通过会员id相等将两个库的卡表的id保存在一个临时表中,

之后用临时表去更新B库的卡id。

我更新成功的一个sql语句如下:

update t_member t set t.id=(select mem_mid.lid from mem_mid  where mem_mid.mid=t.id)

where  exists (select * from mem_mid b where t.id=b.mid);

 

其实就是一个的小问题,在这里记录一下,说不定谁就遇到了或者以后我还会遇到类似的事情。

 

update原理:

Update 语句的原理是先根据 where 条件查到数据后,如果 set 中有子查询,则执行子查询把值查出来赋给更新的字段,执行更新。
如: update  a set a. 字段 1 = (select b. 字段 1 from  b where a. 字段 2=b. 字段 2) where exists(select 1 from  b where a. 字段 2=b. 字段 2) 。查表 a 的所有数据,循环每条数据,验证该条数据是否符合 exists(select 1 from  b where a. 字段 2=b. 字段 2) 条件,如果是则执行 (select b. 字段 1 from  b where a. 字段 2=b. 字段 2) 查询,查到对应的值更新 a. 字段 1 中。关联表更新时一定要有 exists(select 1 from  b where a. 字段 2=b. 字段 2) 这样的条件,否则将表 a 的其他数据的字段 1 更新为 null 值。

你可能感兴趣的:(update)