简体   繁体   中英

Left Outer Join and Union

I have two tables that have a parent and associated via a foreign key through their parent table, ie

TableP
 -----------------
| C1  | P2  | P3  |
 -----------------
   0    P2    P3

TableA
 -----------------
| C1  | A2  | A3  |
 -----------------
   0    A21   A31
   0    A22   A32

TableB
 -----------------
| C1  | B2  | B3  |
 -----------------
   0    B21   B31
   0    B22   B32

What I need is to pull the data in the following result set:

 ---------------------------------
| C1  |  A2  |  A3  |  B2  |  B3  |
 ---------------------------------
   0     A21   A31    NULL   NULL
   0     A22   A32    NULL   NULL
   0    NULL   NULL    B21    B31
   0    NULL   NULL    B22    B32

Is this possible through a combination of LEFT OUTER JOIN and UNION ?

UPDATE :

Since one of the commenters answered the question but not in the form of an answer, here is the solution that worked for me:

SELECT p.c1, a.a2 a2, a.a3 a3, NULL b2, NULL b3 
FROM tablep p LEFT OUTER JOIN tablea a on a.c1 = p.c1 
UNION 
SELECT p.c1, NULL a2, NULL a3, b.b2 b2, b.b3 b3 
FROM tablep p LEFT OUTER JOIN tableb b on b.c1 = p.c1;

Try this :

SELECT P.C1,A.A2,A.A3,B.B2,B.B3 FROM TableP P 
LEFT OUTER JOIN TableA A ON P.C1 = A.C1
LEFT OUTER JOIN TableB B ON P.C1 = B.C1

Have used Left Outer Join, as you asked for, no need of Union

Try this (not tested), make changes if there are some syntax errors.

select coalesce(taba.p1,tabb.p1), taba.a2, taba.a3, tabB.b2, tabB.b3
  from (select 'A'||to_char(rownum) RR, a2, a3, tablep.p1 p1
          from tablea JOIN TABLEP ON (tablea.p1 = tablep.p1)) taba
     FULL OUTER JOIN  
       (select 'B'||to_char(rownum) RR, b2, b3, tablep.p1 p1
          from tableb JOIN TABLEP ON (tableb.p1 = tablep.p1)) tabB
    on (taba.rr = tabB.rr and tabB.p1 = tabA.p1);

Assuming TableA.A2 is always not equal to TableB.B2

SELECT  tableP.C1,tableA.A2,tableA.A3,tableB.B2,tableB.B3
FROM tableA,tableB,tableP
WHERE tableP.C1 = tableA.C1
  AND tableP.C1 = tableB.C1
  And tableA.A2 = tableB.B2(+)
UNION ALL
SELECT  tableP.C1,tableA.A2,tableA.A3,tableB.B2,tableB.B3
FROM tableA,tableB,tableP
WHERE tableP.C1 = tableA.C1
  AND tableP.C1 = tableB.C1
  And tableB.B2 = tableA.A2(+)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM