四张表
A表字段有   id  name  number
B表字段有   name  user
C表字段有   name  user
D表字段有   id    username如果我想显示 A表的number B或C中的user  D中的username
如果A中的name与B中的name相等显示B中的user,与C中的name相等则显示C表的user
怎样写SQL语句?
跪求大侠!!!!
谢谢!

解决方案 »

  1.   

    select a.number,e.user,d.username from a, d, (select * from b union select * from c) as e
         where a.id = d.id and a.name=e.name
         group by a.number
      

  2.   

    也可以化简,你主要是比较当b.name和c.name有重复时,不要c记录.
    所以可以把B表C表合并为name唯一的表,然后再联合这个表查询.
    这个表可以通过如下语句得到:select * from b union select * from c where c.name not in (select name from b);
      

  3.   


    --如果b,c表的字段重复的话,我觉得应该将两表合并为一个表
    --下面是一个实例:
    with ta as(
         select '1001' id,'第一号机器' name,10 num from dual union all
         select '1002','第二号机器',20 from dual union all
         select '1003','第三号机器',30 from dual union all
         select '1004','第四号机器',40 from dual union all
         select '1005','第五号机器',50 from dual)
    ,tb as(
        select '第一号机器' name,'Operator' users from dual union all
        select '第四号机器','Manager' from dual union all
        select '第三号机器','Manipulator' from dual)
    ,td as(
        select '1001' id,'James' user_name from dual union all
        select '1002','Smith' from dual union all
        select '1003','Scott' from dual union all
        select '1004','Jim' from dual)
    select ta.id,ta.name,tb.users,td.user_name
    from ta,tb,td
    where ta.id=td.id --使用等值连接即可
      and ta.name=tb.name
    /
    ID   NAME       USERS       USER_NAME
    ---- ---------- ----------- ---------
    1001 第一号机器 Operator    James
    1003 第三号机器 Manipulator Scott
    1004 第四号机器 Manager     Jim