求两表的特殊集

califord 2017-02-09 08:47:33
请各位看仔细哟,用unoin full outer join ineer jion等试过均不行
有两张表A与B
A表字段:A_ID A_NAME A_DATE A_NU
B表字段:B_ID B_NAME B_DATE B_NU
其中A_ID=B_ID A_NAME=B_NAME 要组成的AB表内容如下:
A_ID A_NAME AB_DATE A_NU B_NU --注意这里是AB_DATE
表部分内容如下图


要注意这里A表中的A_DATE字段的部分值在B表中是没有的,同样B表中的B_DATE字段部分值在A表也是没有,当然部分值有。

比如2017-02-09 这一天AB均有,所以A_NU 9 而B_NU 5 ,如AB表的第一行

但是在2017-02-08里只有A表有,B表却没有对应记录,所以A_NU 5 而B_NU为空,如AB表的第二行

而2017-02-03这天A表没有,B表却有,所以A_NU NULL 而B_NU 4 如AB表的第五行

感谢各位支持哟
...全文
134 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
califord 2017-02-10
  • 打赏
  • 举报
回复
不知道为什么,我在实际程序的时候发现利用select * 后面不加条件出来的是全量数据,但是后面加个条件,比如where a.a_id=‘1’时就出来部分数据,最后用nvl2()函数解决。感谢支持
蓝色蛋饼 2017-02-09
  • 打赏
  • 举报
回复
--full join+nvl   昨天刚有个人问过,
with tab as
 (select 1 a_id, 'A' a_name, '2017-02-09' a_date, 9 a_nu
    from dual
  union all
  select 1, 'A', '2017-02-08', 9
    from dual
  union all
  select 1, 'A', '2017-02-01', 6 from dual),
tabb as
 (select 1 b_id, 'A' b_name, '2017-02-09' b_date, 5 b_nu
    from dual
  union all
  select 1, 'A', '2017-02-03', 4 from dual)
select nvl(tab.a_id, tabb.b_id) a_id,
       nvl(tab.a_name, tabb.b_name) a_name,
       nvl(tab.a_date, tabb.b_date) a_date,
       tab.a_nu,
       tabb.b_nu
  from tab
  full join tabb
    on (tab.a_id = tabb.b_id and tab.a_name = tabb.b_name and
       tab.a_date = tabb.b_date)

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧