C视图:
ID Pr_ID  XH)Name  Kind 人员ID GN_Add GN_Update GN_Del
A01        1 房产资源管理 1     
A01B01 A01    1 公司简介    2  001    True   False    True
A01B02 A01    2 小区简介    2 001    True   False    False
A02        2 客户档案管理 1
A02B01 A02    1 入住管理    2  001    True   False    True
A02B01 A02    1 入住管理    2  002    False  True     False

解决方案 »

  1.   

    Creaet or repalce view as
    select A.ID,A.PR_ID,A.XH,A.Name,A.Kind,B.人员ID,B.GN_Add ,B.GN_Update ,B.GN_Del
    from A,B
    where A.ID=B.GNID(+)
      

  2.   

    考虑到a表的ID在b表的GNID不唯一,所以应该以b表为基础表
      

  3.   

    create view c as
    select 
           A.ID,
           A.Pr_ID,
           A.XH,
           A.Name,
           A.Kind,
           B.人员ID,
           B.GN_Add,
           B.GN_Update,
           B.GN_Del
    from 
           A表 A
    left join
           B表 B
    on
           A.ID = b.GNID
      

  4.   

    create view c as
    select 
           A.ID,
           A.Pr_ID,
           A.XH,
           A.Name,
           A.Kind,
           B.人员ID,
           B.GN_Add,
           B.GN_Update,
           B.GN_Del
    from 
           A表 A
    left join
           B表 B
    on
           A.ID = b.GNID
      

  5.   

    TO 以上各位:
    你们都在把A表全部列出来了,但我想在某一个用户在一个功能节点下没有功能,那么该功能节点的以及子节点是不选的.
      

  6.   


    在SQL Server中可以这样写:
    select a.*,人员ID=isnull(b.人员ID,'')
    from A left join B on a.ID=b.GNID
    where exists(
    select * from b where GNID=a.ID or b.GNID like a.ID+'_%')但Oracle不支持这样的写法:
          b.GNID like a.ID+'_%'
      

  7.   

    select A.ID,A.PR_ID,A.XH,A.Name,A.Kind,B.人员ID,B.GN_Add ,B.GN_Update ,B.GN_Del
    from A,B WHERE A.ID=B.GNID(+)