`

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值。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics