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
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