当前位置: 代码迷 >> Oracle管理 >> ORACLE多个表如何建视图
  详细解决方案

ORACLE多个表如何建视图

热度:68   发布时间:2016-04-24 04:35:44.0
ORACLE多个表怎么建视图
如题,现在有一个表CYTBXX,里面有字段id,ryid,页面显示其内容后,要根据ryid显示另外两个表PHGSXX(配货公司信息)、PHRYXX(配货人员信息)的全部信息,由于公司框架的需求,现在要用视图的方式进行显示;PHGSXX字段id,gsname;PHRYXX的字段:id,ryname;我自己建立的视图如下:
create or replace view cytbxx_cyid_view(ryid,gsname,ryname,id) as 
select null, phgsxx.gsname,null,null from phgsxx,cytbxx  where cytbxx.ryid(+)=phgsxx.id
 union all
 select null,null,phryxx.ryname,null from phryxx,cytbxx where cytbxx.ryid(+)=phryxx.id
 union all
 select ryid,null,null, id from cytbxx 
按说相同ryid的字段应该显示为一行,但结果却都是为null;即
ryid ,  gsname,ryname,id
 aaa                  1    
 bbb,                 2
  ...                 ...
          aa
          bb
          ...              
                A
                B
        ...
这样子,但是自己想要的应该是ryid和PHGSXX里面的id相同时候应该显示为一行的,同样当ryid和PHRYXX里面的id相同时候也应该显示为一行的;是我建立的视图出现什么问题了吗?            

------解决方案--------------------
select cytbxx.ryid, phgsxx.gsname,phryxx.ryname from phgsxx,cytbxx,phryxx  where cytbxx.ryid(+)=phgsxx.id and cytbxx.ryid(+)=phryxx.id

------解决方案--------------------
找你这样写应该是把每一列写个别名,然后整体select一把
select xx,xx from(
select null xx, phgsxx.gsname,null,null from phgsxx,cytbxx  where cytbxx.ryid(+)=phgsxx.id
 union all
 select null,null,phryxx.ryname,null from phryxx,cytbxx where cytbxx.ryid(+)=phryxx.id
 union all
 select ryid,null,null, id from cytbxx )
  相关解决方案