Frage zum Left Outer Join

markus29

Neuer Benutzer
Beiträge
2
Hallo Leute,

ich habe ein SQL-Problem, bei dem Ihr mir vielleicht helfen könnt :)

Folgende Konstellation:

mis_markt_belegung -> mis_vorgang_pos (1:1)
mis_vorgang_pos -> mis_rechnung_pos (1:n), mis_rechnung_pos muss nicht gefüllt sein
mis_rechnung_pos -> mis_rechnung_kopf (n:1), mis_rechnung_kopf ist immer gefüllt
mis_rechnung_kopf -> mis_rechnung_summen (1:1), mis_rechnung_summen ist immer gefüllt
mis_rechnung_kopf -> auswahlfeld_rechnungsstatus (1:1), auswahlfeld_rechnungsstatus ist immer gefüllt
mis_rechnung_kopf -> auswahlfeld_bankbeleg (1:1), auswahlfeld_bankbelegmuss nicht gefüllt sein

SQL-Statement:

SELECT *
FROM mis_markt_belegung
INNER JOIN mis_vorgang_pos ON mis_markt_belegung.vorgang_pos_key = mis_vorgang_pos.vorgang_pos_key
AND mis_vorgang_pos.geloescht = 0
LEFT OUTER JOIN mis_rechnung_pos ON mis_vorgang_pos.vorgang_pos_key = mis_rechnung_pos.vorgang_pos_key
AND mis_rechnung_pos.geloescht = 0
INNER JOIN mis_rechnung_kopf ON mis_rechnung_pos.rechnung_key = mis_rechnung_kopf.rechnung_key
AND mis_rechnung_pos.geloescht = 0
INNER JOIN mis_rechnung_summen ON mis_rechnung_pos.rechnung_key = mis_rechnung_summen.rechnung_key
AND mis_rechnung_summen.ist_hauswaehrung = 1
AND mis_rechnung_summen.geloescht = 0
INNER JOIN mis_auswahlfelder_pos auswahlfeld_rechnungsstatus ON mis_rechnung_kopf.status = auswahlfeld_rechnungsstatus.auswahlfeld_pos_key
AND auswahlfeld_rechnungsstatus.kuerzel != '999'
AND auswahlfeld_rechnungsstatus.geloescht = 0
LEFT OUTER JOIN mis_auswahlfelder_pos auswahlfeld_bankbeleg ON mis_rechnung_kopf.bankbeleg = auswahlfeld_bankbeleg.auswahlfeld_pos_key
AND auswahlfeld_bankbeleg.geloescht = 0
WHERE mis_markt_belegung.markt_key = 27
AND mis_markt_belegung.geloescht = 0


Wenn zu einem Datensatz in der Tabelle mis_vorgang_pos kein entsprechender Datensatz in der Tabelle mis_rechnung_pos vorhanden ist, bekomme ich ein leeres Ergebnis. Warum funktioniert der
LEFT OUTER JOIN mis_rechnung_pos ON mis_vorgang_pos.vorgang_pos_key = mis_rechnung_pos.vorgang_pos_key in diesem Fall nicht?


Vielen Danke :)

LG Markus
 
Werbung:
Hallo Leute,

ich habe ein SQL-Problem, bei dem Ihr mir vielleicht helfen könnt :)

Wenn zu einem Datensatz in der Tabelle mis_vorgang_pos kein entsprechender Datensatz in der Tabelle mis_rechnung_pos vorhanden ist, bekomme ich ein leeres Ergebnis. Warum funktioniert der
LEFT OUTER JOIN mis_rechnung_pos ON mis_vorgang_pos.vorgang_pos_key = mis_rechnung_pos.vorgang_pos_key in diesem Fall nicht?


Vielen Danke :)

LG Markus


Auf die Schnelle sehe ich keinen Fehler. Probier die Abfrage schrittweise aus. Bin jetzt zu müde, mir das genauer anzusehen.
 
Ähm, warum? Er setzt ja nur einen Alias, soweit ich das parse.
Stimmt, kurze Notation. Da hat mich wohl der Wurm überrannt.

LEFT OUTER JOIN mis_auswahlfelder_pos auswahlfeld_bankbeleg ON mis_rechnung_kopf.bankbeleg = auswahlfeld_bankbeleg.auswahlfeld_pos_key
AND auswahlfeld_bankbeleg.geloescht = 0

Die Selektion der Daten gehört aber definitiv in eine WHERE Klausel und nicht in den JOIN. So wird letztendlich ein INNER JOIN erzwungen.
 
Dann liegt es vermutlich daran :)

D. h. immer wenn ich einen LEFT OUTER / RIGHT OUTER verwende muss die Selektion dieser in die Where-Klausel und nicht in den Join?
 
Oder Faustregel:
Die Join-Condition sorgt für mehr zurückgegebene Information, die Einschränkungen der Where-Condition für weniger. :)
 
Werbung:
Zurück
Oben