PDA

View Full Version : SQL-Joins



KM
07-02-14, 11:02
Hallo,

ich stehe gerade etwas auf dem Schlauch bzw. sehe den Wald vor lauter Bäumen nicht.
Und zwar habe ich 2 Dateien (Datei A und Datei B) mit demselben eindeutigen Key-Feld.
Jetzt kann es vorkommen, dass zu einem Key in beiden Dateien ein Eintrag existiert oder nur in Datei A oder nur in Datei B.
Bei einem INNER JOIN erhalte ich ja nur die Sätze, die in beiden Dateien vorkommen. Bei einem LEFT JOIN erhalte ich alle, die in beiden vorkommen plus diejenigen, die nur in Datei A vorkommen. Doch wie muss ich nun joinen, um die Datensätze in allen 3 Varianten zu erhalten ("nur in Datei A vorhanden" plus "in beiden Dateien vorhanden" plus "nur in Datei B vorhanden").

Vielen Dank,
KM

malzusrex
07-02-14, 11:09
Ohne getestet zu haben eventuell so:


Select * from FileA a
where exists (Select * from FileB B where a.key1 = b.key1)
union all
Select * from FileA c
where not exists (Select * from FileB d where c.key1 = d.key1)
union all
Select * from FileB e
where not exists (Select * from FileA f where e.key1 = f.key1)

B.Hauser
07-02-14, 11:14
Wenn Du auf Release 6.1 oder höher bist:


Select a.*, b.*
From FileA a Full Outer Join FileB b
on a.key1 = b.Key1
and a.Key2 = b.Key2
and ....
and a.KeyN = b.KeyN

vor 6.1


Select a.*, b.*
From FileA a Left Outer Join FileB b on a.Key1 = b.Key1 ....
Union
Select a.*, b.*
From FileA a Right Outer Join FileB b. on a.Key1 = b.Key1 ....;

KM
07-02-14, 11:15
Ich hab's gerade in der IBM-Doku gefunden (ein simulierter Full Outer Join):


SELECT EMPNO, LASTNAME, PROJNO
FROM CORPDATA.EMPLOYEE LEFT OUTER JOIN CORPDATA.PROJECT
ON EMPNO = RESPEMP
WHERE LASTNAME > 'S'
UNION
(SELECT EMPNO, LASTNAME, PROJNO
FROM CORPDATA.PROJECT EXCEPTION JOIN CORPDATA.EMPLOYEE
ON EMPNO = RESPEMP
WHERE LASTNAME > 'S')

Vielen Dank,
KM

KM
07-02-14, 11:17
@Birgitta:

Wir sind leider noch auf V5R4. Aber hoffentlich nicht mehr lange. Es ist schon frustrierend, wenn man sieht was mit den neueren Releases geht, aber mit V5R4 noch nicht.

Gruß,
KM

B.Hauser
07-02-14, 11:20
Wem sagst Du das, ich muss hier alles auf V5R4 herunterwandeln und das noch solange bis der letzte unserer Kunden auf ein höheres Release gegangen ist.

Birgitta

Fuerchau
07-02-14, 11:47
Ich muss z.T. noch mit V5R2 arbeiten, da scheitert der Optimizer noch an ungleichen Definitionen bei numerischen Feldern (decimal->numeric) um Indizes zu verwenden. Ohne Cast geht da nichts.
Aber man kann trotzdem performante SQL's entwickeln.
Und andere Datenbanken haben noch SQL92, da geht auch noch nicht viel.