小弟需求如下:
     表user1,user2,user3,userStatus
     前三个分别是对应不同角色的用户表,剔除其他字段,现假设有字段id和name(3个表都有,并且id是3个表共用一个sequence的。)userStatus有字段user_id,不管其他字段,userStates是在u1,u2,u3表分别在插入记录(建立用户)的时候,增加一条记录,并记录相应的user表中的id为user_id。OK,需求来了:
     我需要一个视图,里面要有4个字段,分别是user_id,u1_name,u2_name,u3_name。并且列出的总条数就是u1+u2+u3表记录的行数,或者userStatus表的行数。当user_id对应user1的id的时候,字段u1_name取user1表的name,其他字段就是null。以此类推。注:表结构设计的不好,麻烦大家不要在表结构上讨论了。

解决方案 »

  1.   

    其实这个视图好像完全用不上userstatus表select id userid,name u1_name,null u2_name,null_u3_name from user1
    union all
    select id,null,name,null from dual
    union all
    select id,null,null,name from dual;
      

  2.   


    我认为楼主好像是想要userstatus这个表里面其他的数据,只是为了说明问题举的例子。
    select d.user_id,a.name u1_name,b.name u2_name,c.name u3_name
      from user1 a,user2 b,user3 c,userStatus d
     where d.user_id=a.id(+)
       and d.user_id=b.id(+)
       and d.user_id=c.id(+);
      

  3.   

    这是我的试验结果,如果嫌顺序不好看自己加个order by d.USER_ID 上去。
    [TEST@ora10gr1#2009-11-26/21:45:30] SQL>with
      2  user1 as( select 1 id,'user1a' name from dual
      3            union all
      4            select 2 id,'user1b' name from dual
      5  ),
      6  user2 as( select 3 id,'user2a' name from dual
      7            union all
      8            select 4 id,'user2b' name from dual
      9  ),
     10  user3 as( select 5 id,'user3a' name from dual
     11            union all
     12            select 6 id,'user3b' name from dual
     13  ),
     14  userStatus as( select 1 user_id from dual
     15                 union all
     16                 select 2 user_id from dual
     17                 union all
     18                 select 3 user_id from dual
     19                 union all
     20                 select 4 user_id from dual
     21                 union all
     22                 select 5 user_id from dual
     23                 union all
     24                 select 6 user_id from dual
     25  )
     26  select d.user_id,a.name u1_name,b.name u2_name,c.name u3_name
     27    from user1 a,user2 b,user3 c,userStatus d
     28   where d.user_id=a.id(+)
     29     and d.user_id=b.id(+)
     30     and d.user_id=c.id(+)
     31  ;   USER_ID U1_NAM U2_NAM U3_NAM
    ---------- ------ ------ ------
             5               user3a
             6               user3b
             4        user2b
             3        user2a
             1 user1a
             2 user1b6 rows selected.