2017-01-12 4 views
0

Bitte ich brauche deine Hilfe.SQL Join auf drei Tabellen, Zeilen, die in 2 Tabellen existieren, aber nicht die dritte

Angenommen, wir haben drei Tabellen A, B und C, wie unten in der Abbildung dargestellt:

image

Ich mag Zeilen in der Tabelle A erhalten, die vorhanden ist oder nicht in der Tabelle B existiert, und Zeilen in Tabelle C, die vorhanden sind oder nicht, existieren in Tabelle B unter Verwendung einer SQL-Anfrage.

Ich habe versucht, dies funktioniert aber nicht:

SELECT A.ATS0804, C.ATS0207, A.ATS0959, A.ATS0802, B.ATS0827          
      FROM 
      ISUT183.ENS0042 B 
      RIGHT JOIN ISUT183.ENS0038 A 
      ON B.ENS0038K = A.ATS0804 
      RIGHT JOIN ISUT183.EN00041 C 
      ON B.EN00041K = C.AT02812 

       WHERE (C.ATS0207 = '0001757430' 
        AND B.ATS0823 = '9999-01-01' 
        AND A.ATS0803 = '9999-01-01' 
        AND A.ATS0959 = '61384352001' 
       AND A.ATS0802 ='01.01.2010'        
         ) ; 

Like this

Antwort

0

Wenn Sie Gleichheit in Tabelle B in where-Klausel zu testen, die linke äußere oder rechte äußere Verknüpfung tun sie nicht null nehmen Sie Ich habe keine zwischen A und C kommen, dann können Sie eine UNION ALL tun, aber Sie müssen Spalten gleichen Typs in wählt Klausel (ID1 gleiche Art von ID2) nehmen

select * from ( 
select 'A-B' typejoin, A.ID1 as IDA_OR_C, B.ID1 as IDB from A left outer join B on A.ID1=B.ID1 
union all 
select 'A-C' typejoin, C.ID2 as IDA_OR_C, B.ID2 as IDB from C left outer join B on C.ID2=B.ID2 
) tmp 
where .... 
+0

Dank für Ihre Antwort, aber wo kann ich gab, wo Zustand? –

0

Sie können auch eine Cross-Join tun:

with AB as (
select * from A left outer join B on A.ID1=B.ID1 
), 
AC as (
select * from C left outer join B on C.ID2=B.ID2 
) 
select * from AB CROSS JOIN AC 
0

Verwendung where exists und where not exists Klauseln