Oracle 需要消除联接和联合中的重复

Oracle 需要消除联接和联合中的重复,oracle,union,outer-join,Oracle,Union,Outer Join,有人能帮我吗 query:: select Ext_Acct,date_opened,last_date_flown,Sender from table1 T1,table2 T2 where T1.Ext_acct(+)=T2.Ext_acct union select Ext_Acct,date_opened,last_date_flown,Sender from table1 T1,table2 T3 where T1.Ext_acct(+)=T3.Ext_acct 我所掌握的资料如下:

有人能帮我吗

query::
select Ext_Acct,date_opened,last_date_flown,Sender from
table1 T1,table2 T2
where T1.Ext_acct(+)=T2.Ext_acct
union
select Ext_Acct,date_opened,last_date_flown,Sender from
table1 T1,table2 T3
where T1.Ext_acct(+)=T3.Ext_acct
我所掌握的资料如下:

表1

Ext_Acct    date opened last date flown
AAA dd/mm/yyyy  dd/mm/yyyy
BBB dd/mm/yyyy  dd/mm/yyyy
CCC dd/mm/yyyy  dd/mm/yyyy
表2

Ext_Acct    Sender  
AAA XXX 
表3

Ext_Acct    Sender  
BBB YYY 
CCC XXX
预期结果::

Ext Acct    date opened last date flown Sender
AAA dd/mm/yyyy  dd/mm/yyy   XXX
BBB dd/mm/yyyy  dd/mm/yyy   YYY
CCC dd/mm/yyyy  dd/mm/yyy   XXX
结果如下:

Ext Acct    date opened last date flown Sender
AAA dd/mm/yyyy  dd/mm/yyy   XXX
AAA         
BBB dd/mm/yyyy  dd/mm/yyy   YYY
BBB         
CCC dd/mm/yyyy  dd/mm/yyy   XXX
CCC 

在T2和T3上尝试一个联合

select t1.Ext_Acct,
        t1.date_opened,
        t1.last_date_flown,
        t2.Sender 
from
      table1 T1,
       (select Ext_Acct, Sender from Table2 
        union 
        select Ext_Acct, Sender from Table3) T2
where T1.Ext_Acct=T2.Ext_Acct(+)
你可以试试看

select DISTINCT T1.Ext_Acct,T1.date_opened,T1.last_date_flown,T2.Sender from
table1 T1,table2 T2
where T1.Ext_acct(+)=T2.Ext_acct
union
select T1.Ext_Acct,T1.date_opened,T1.last_date_flown,T3.Sender from
table1 T1,table2 T3
where T1.Ext_acct(+)=T3.Ext_acct
但是我建议不要使用隐式连接,而是开始使用显式连接,因为当有大量数据时,显式连接更准确

SELECT DISTINCT T1.Ext_Acct,T1.date_opened,T1.last_date_flown,T2.Sender 
FROM TABLE1 T1 RIGHT JOIN TABLE2 T2
ON T1.Ext_acct = T2.Ext_acct
UNION
SELECT  T1.Ext_Acct,T1.date_opened,T1.last_date_flown,T3.Sender 
FROM TABLE1 T1 RIGHT JOIN TABLE3 T3
ON T1.Ext_acct = T3.Ext_acct