有一个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
)
结果数据好像多出来了,结果不对,求教方法,怎么样才对呢?
值 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
)
结果数据好像多出来了,结果不对,求教方法,怎么样才对呢?
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
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
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);
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'