我遇到下面的这种情况:
现在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值。
分享到:
相关推荐
使用工具IMPDP导入数据时ORA-39002、ORA-39070错误排查。使用工具IMPDP导入数据时ORA-39002、ORA-39070错误排查 使用工具IMPDP导入数据时ORA-39002、ORA-39070错误排查
ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法ora-00604 错误 解决 方法
Oracle 11gr2连Oracle 19c 报ORA-28040 ORA-01017解决方法
oracle数据库ora-01152和ora-01110的解决办法
本人在工作中,从测试库往正式库中复制记录,用select for update 报错:ORA-01480:STR 绑定值的结尾 Null字符缺失 ,遂上网查找,都说是有非法字符(半个引号) 或者长度超长造成的。根据本人分析,应该不是上述原因...
oracle网络配置(listener_ora-sqlnet_ora-tnsnames_ora).mht
Drop goldengate用户时,报ORA-00604 ORA-20782 ORA-06512错误
ORA-32001:write to spfile requested but no spfile is in use请求写入spfile,但没有使用spfile的解决方法 在输入以下语句中报了这样的错误: SQL>alter system set control_files=’/u01/app/oracle/oradata/prod/...
ORACLE ORA-00132 ORA-00214
oracle启动失败,ORA-00702报错,windows,linux系统下解决办法
客户端进行连接的时候,系统不定期出现ora-12520,ora-12516的连接问题, 问题解决方案建议: 1、增加process和session的连接数。 2、检查连接的应用,是不是有没有释放的连接。 3、将修改参数local_listener中的vip为...
离线误删空间文件导致的ORA-01033及ORA-01145问题的解决办法,在解决ORA-01033的过程中,又出现ORA-01145 * 第 1 行出现错误: ORA-01145: 除非启用了介质恢复, 否则不允许立即脱机 接着的解决步骤
ORA-12541 TNSno listener 的解决方案 ORA-12541 TNSno listener 的解决方案
在运行查询SELECT * FROM V$SESSION 会出现ORA-29275:部分多字节字符的错误,这是什么原因开始我不得其解,网上也没有介绍什么好办法。本文给出答案。
Oracle Database on Linux Fails to Start - ORA-27154 ORA-27300 ORA-27301 ORA-27302: failure occurred at: sskgpbitsper (Doc ID 2789636.1)
BLOG_【故障处理】Oracle_lhr_ORA-01565 告警日志报“ORA-01565 Unable To open Spfile”.pdf
oracle数据库优化之后,报错报错“ora-00838”的处理方法
NULL 博文链接:https://rongren.iteye.com/blog/1886071
OGG之ORA-01403案例,包括这个案例所遇到的错误详解,对使用的参数进行了详细的解说