--> 测试数据:[a]
if object_id('[a]') is not null drop table [a]
go 
create table [a]([x] varchar(6),[y] varchar(6))
insert [a]
select 'A','A1' union all
select 'B','B1' union all
select 'C','C1' --> 测试数据:[b]
if object_id('[b]') is not null drop table [b]
go 
create table [b]([x] varchar(6),[y] varchar(6))
insert [b]
select 'A','A2' union all
select 'C','C2' union all
select 'D','D2' --c查询语句
select o.xx,isnull(p.y,'')as py , isnull(q.y,'')as qy  from 
(
select distinct i.xx from 
(
select a.x as xx from a
union all
select b.x as xx from b
) i 
) o left join a p on o.xx=p.x 
left join b q on o.xx=q.xxx     py     qy
------ ------ ------
A      A1     A2
B      B1     
C      C1     C2
D             D2(4 行受影响)

解决方案 »

  1.   

    create table t5(id1 varchar2(10),name1 varchar2(10));
    create table t4(id varchar2(10),name varchar2(10));
    insert into t4 values('A','A1');
    insert into t4 values('B','B1');
    insert into t4 values('C','C1');
    insert into t5 values('A','A2');
    insert into t5 values('C','C2');
    insert into t5 values('D','D2');SELECT nvl(id,id1),name,name1 FROM (
    SELECT * FROM T4,T5 WHERE T4.ID= T5.ID1(+)
    UNION
    SELECT * FROM T4,T5 WHERE T4.ID(+)= T5.ID1
    )
      

  2.   


    SELECT T1.C1,
           (SELECT T2.C2 FROM TEST T2 WHERE T1.C1 = T2.C1) C2,
           (SELECT T2.C2 FROM TEST1 T2 WHERE T1.C1 = T2.C1) C3
      FROM (SELECT C1
              FROM TEST
            UNION
            SELECT C1 FROM TEST1) T1
      

  3.   

    with a as (
    select 'A' c1,'A1' c2 from dual union all 
    select 'B','B1'  from dual union all
    select 'C','C1'  from dual
    ),b as(
    select 'A' c1,'A2' c2 from dual union all
    select 'C','C2' from dual union all
    select 'D','D2' from dual
    )select decode(a.c1,null,b.c1,a.c1) c1,a.c2,b.c2 from a full join b on a.c1=b.c1 order by c1