我的问题是这样的:(环境ORACLE)
现在有两张关联表
其中表A结构数据如下:
AID    ANAME   
1      身高    
2      体重   
3      年龄   
4      出生地表B结构数据如下
BID   BNAME
1      小张
2      小王
而表C结构数据如下:
CID   AID   CVALUE  BID
1     1     170      1
1     2      80      2现在想得到的查询结果是:
视图D(这是小张的数据)
AID   ANAME        CVALUE 
1      身高          170
2      体重          空
3      年龄          空
4      出生地       空结果的意思也就是,如果要找一个人的信息,比方小张的,那么先列出表A中的所有数据,再到表C中根据表B中小张的编号和表A中各属性的编号找对应的值,如果没有找到对应的值就用空来填补视图D中的属性值,也就是说当表C中没有小张的任何属性值时,最后显示的视图也要把表A中所有数据列出,并将CVALUE值赋空值。请理解我的意思。 表A存放的是所有人员参数列表,表B存放的是人员列表,表C存放的是针对人员参数的值。而最后要得到的是某个人员所有参数的值,如果表C中没这个人员的值也要补空值。谢谢(100分)

解决方案 »

  1.   

    我可能说的不清楚, 这么说吧:
    其中表A结构数据如下: 
    AID    ANAME     (人员参数表)
    1      身高     
    2      体重    
    3      年龄    
    4      出生地 表B结构数据如下 (人员表)
    BID   BNAME 
    1      小张 
    2      小王 
    而表C结构数据如下: (人员参数值表)
    CID   AID   CVALUE  BNAME 
    1     1     170      小张
    1     2      80      小王 现在想得到的查询结果是: 
    视图D(这是小张的数据) 
    AID   ANAME        CVALUE   BNAME
    1      身高          170      小张
    2      体重          空        小张
    3      年龄          空        小张
    4      出生地        空        小张上面,在表C中其实小张的记录只有一条,也就是身高170的信息,而最后得到的结果要求列出小张的所有参数值。因为只有身高有数据,所以其它用空值来补。
      

  2.   


    create or replace view d as
    select a.aid,a.aname,t.cvalue
    from (select c.* from b,c where c.bid=b.bid and b.bname='&name') t,a
    where t.aid(+)=a.aid不知道你表的cvalue是什么类型,
    个人感觉,你的表建的很不爽
      

  3.   

    很简单啊:SELECT A.AID,A.ANAME,COALESCE(C.CVALUE,'空') CVALUE ,B.BNAME 
       FROM B, A LEFT JOIN C ON A.AID = C.AID
       WHERE C.BID =B.BID
       AND B.BNAME = '小张';
      

  4.   

    SELECT A.AID,A.ANAME,COALESCE(C.CVALUE,'NULL') CVALUE ,B.BNAME 
       FROM B, A LEFT JOIN C ON A.AID = C.AID
       WHERE C.BID =B.BID
       AND B.BNAME = '小张'; 
      

  5.   

    select a.AID, a.AName, t.CValue, t.BName
      from A a
      left join (select b.BID, B.BName, c.CID, a.AID, c.CValue
                   from B b
                   join C c on b.BName = c.BName
                  where b.BName = '小张') t on t.AID = a.AID
    在Oracle 里 应该这么写!
    你的表设计的有问题,不符合3范式。
    如果B表里有两个人叫小张 你的数据库就会出问题了。
    B表的主键做C表的外键才不会出现更新异常
      

  6.   

    这不关表设计的问题,我只是举个例子, 只为求一条SQL语句!
      

  7.   


    select t1.aid,t1.aname,b.cvalue from t1 left join
    (select * from t3 where bid in
           (select bid from t2 where bname='小张')
    ) b
    on t1.aid=b.aid