首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

ORACLE多个表如何建视图

2013-08-13 
ORACLE多个表怎么建视图如题,现在有一个表CYTBXX,里面有字段id,ryid,页面显示其内容后,要根据ryid显示另外

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 )


group by xx,xx 才会出你想要的结果

热点排行