有一个A表:字段 A1 B1
             值 a  b有一个B表:字段 A1 C1
             值 c  d现在想组成一个表:字段 A1 B1 C1当a=c的时候,可以 select A1,B1,C1 from A,B where A.A1=B.A1,这样没问题,但是如果
当a不等于c的时候,怎么样组成 字段: A1 B1 C1
                                     a b  0
                                     c 0  d 这样呢?
我曾经试过用full outer join ,结果报数据库内部错误。后来我改用union all,语句是这样的:
select  A.A1,NVL(A.B1,0) B1,NVL(B.C1,0) FROM A,B WHERE A.A1=B.A1(+) 
UNION ALL
(select  B.A1,NVL(A.B1,0) B1,NVL(B.C1,0) FROM A,B WHERE A.A1(+)=B.A1 
)
结果数据好像多出来了,结果不对,求教方法,怎么样才对呢?

解决方案 »

  1.   

    select case when a.a1=b.a1 then a.a1 else b.a1 end a1,
           case when a.a1=b.a1 then a.b1 else 0 end b1,
           case when a.a1=b.a1 then 0 else b.c1 end b1
    from a,b
      

  2.   

    --看你有什么条件不,加到最后就可以了。。
    select 
      case when a.a1=b.a1 then a.a1 else b.a1 end a1,
      case when a.a1=b.a1 then a.b1 else 0 end b1,
      case when a.a1=b.a1 then 0 else b.c1 end c1
    from a,b 
      

  3.   

    1、使用union all,是不正确的,有重复数据(A1相同),改写成union试试
    2、9i后的方法
    SELECT * FROM A FULL OUTER JOIN B USING (a1); 
    3、9i前的方法
    SELECT a.A1, a.B1, b.C1
      FROM A, B
     WHERE a.A1 = b.A1(+)
    UNION
    SELECT b.A1, '' B1, C1
      FROM b
     WHERE NOT EXISTS (SELECT 1 FROM A WHERE a.A1 = b.A1);
      

  4.   


    1.
    select * from yyq1
    ---------------------
    id  name
    1, 'a'2.
    select * from yyq2
    ----------------------
    id   name2
    2, 'name3'3.
    select id A1, max(name) B1, max(name2) C1 from (
    select id,name,0 name2 from yyq1
    union
    select id,0 name,name2 from yyq2
    ) tab group by id
    ---------------------------------------
    1, 'a', '0'
    2, '0', 'name3'