查看: 16866|回复: 7

[PL/SQL] 求解答:将B表的值插入A表中为空的字段

[复制链接]
论坛徽章:
3
2014年新春福章
日期:2014-02-18 16:50:09马上有车
日期:2014-02-18 16:50:09优秀写手
日期:2014-03-12 06:00:13
发表于 2014-3-6 16:35 | 显示全部楼层 |阅读模式
今天遇到个问题,用函数的方法解决了,但是不知道可不可以用Pl/sql搞定,如下的表A表
id1     id2      id3
1       2         3
4       null      6
7       8         null

B表
id1    id2     id3
1      2       3   
4      5       6
7      8       9

怎样比较A和B,假如A中对应的值为空,将B表中对应的值插入,求解答,merge搞不定呀~
论坛徽章:
115
生肖徽章:狗
日期:2007-01-06 21:14:12马上有车
日期:2014-03-06 16:45:08马上加薪
日期:2014-05-09 12:27:582014年世界杯参赛球队: 英格兰
日期:2014-07-03 13:10:44青年奥林匹克运动会-竞技体操
日期:2014-09-10 15:30:57马上有钱
日期:2014-10-31 13:56:48美羊羊
日期:2015-03-04 14:48:582015年新春福章
日期:2015-03-06 11:57:31懒羊羊
日期:2015-04-23 19:26:10金牛座
日期:2015-09-17 08:21:44
发表于 2014-3-6 16:46 | 显示全部楼层
先查询出来,然后再UPDATE

使用道具 举报

回复
论坛徽章:
23
奥运会纪念徽章:帆船
日期:2013-02-17 16:13:19三菱
日期:2013-10-29 20:28:16现代
日期:2013-10-29 20:28:16三菱
日期:2013-10-29 20:28:16现代
日期:2013-10-29 20:28:16三菱
日期:2013-10-29 20:28:16比亚迪
日期:2014-01-24 16:03:312014年新春福章
日期:2014-02-18 16:49:31马上有钱
日期:2014-02-18 16:49:31喜羊羊
日期:2015-03-04 14:54:42
发表于 2014-3-6 16:46 | 显示全部楼层
  1. update a set a.id2 = (select b.id2 from  a.id1 = b.id1 and rownum = 1)
  2. WHERE a.id2 is null;

  3. update a set a.id3 = (select b.id3 from  a.id1 = b.id1 and rownum = 1)
  4. WHERE a.id3 is null;
复制代码

使用道具 举报

回复
论坛徽章:
3
2014年新春福章
日期:2014-02-18 16:50:09马上有车
日期:2014-02-18 16:50:09优秀写手
日期:2014-03-12 06:00:13
 楼主| 发表于 2014-3-6 17:03 | 显示全部楼层
fengnash 发表于 2014-3-6 16:46

我的这个表只是个例子,实际上我并不知道那些字段是空的,我需要先判断,再插入

使用道具 举报

回复
认证徽章
论坛徽章:
135
玉石琵琶
日期:2014-07-02 10:11:04九尾狐狸
日期:2014-07-02 10:11:04紫蜘蛛
日期:2014-07-02 10:11:04蓝色妖姬
日期:2014-07-02 10:11:04蓝色妖姬
日期:2014-08-28 15:17:25马上加薪
日期:2014-08-07 12:47:01马上加薪
日期:2014-07-23 11:55:37马上加薪
日期:2014-07-21 16:24:17马上加薪
日期:2014-07-17 17:01:52马上加薪
日期:2014-07-17 16:15:19
发表于 2014-3-6 17:16 | 显示全部楼层
chenrongyao 发表于 2014-3-6 17:03
我的这个表只是个例子,实际上我并不知道那些字段是空的,我需要先判断,再插入

   WHERE a.id2 is null;
这个不就判断了么

使用道具 举报

回复
论坛徽章:
3
2014年新春福章
日期:2014-02-18 16:50:09马上有车
日期:2014-02-18 16:50:09优秀写手
日期:2014-03-12 06:00:13
 楼主| 发表于 2014-3-6 17:56 | 显示全部楼层
ri6789 发表于 2014-3-6 17:16
WHERE a.id2 is null;
这个不就判断了么

但是我不仅仅要判断id2还有id3,需求是判断一张表的所有字段。。所以我就写得函数,想知道有没有简单的办法

使用道具 举报

回复
论坛徽章:
3
2014年新春福章
日期:2014-02-18 16:50:09马上有车
日期:2014-02-18 16:50:09优秀写手
日期:2014-03-12 06:00:13
 楼主| 发表于 2014-3-6 18:37 | 显示全部楼层
哈哈,根据自己摸索终于用万能的decode实现了,先给两个表的id1建主键,之后:
update (select a.id2 old_id2,a.id3 old_id3,
decode(a.id2,null,b.id2,a.id2) new_id2,
decode(a.id3,null,b.id3,a.id3) new_id3,
from t1 a,t2 b where a.id1=b.id1)
set old_id2=new_id2,old_id3=new_id3;

可惜实际环境有40个字段,这样写估计也很麻烦咯,刚才得知新的需求,还要再判断,假如两个值不同的话要插入另一张报错表。。。我再去想想

使用道具 举报

回复
论坛徽章:
27
开发板块每日发贴之星
日期:2008-01-17 01:06:29ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04紫蛋头
日期:2013-06-07 17:04:33马上有房
日期:2014-02-18 16:42:02懒羊羊
日期:2015-03-04 14:52:11秀才
日期:2015-08-24 09:51:48秀才
日期:2015-09-17 09:11:05天蝎座
日期:2016-01-04 11:15:24迷宫蛋
日期:2016-02-03 16:13:47咸鸭蛋
日期:2016-02-03 16:14:11
发表于 2014-3-15 22:48 来自手机 | 显示全部楼层
设计这模型的人估计脑残

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表