So, jetzt kann ich endlich antworten.
Vorab folgende Info: Ich habe festgestellt, dass wider Erwarten die Beziehung von tab1 zu tab2 n:m war. Ich habe tab2 jetzt bearbeitet, so dass tatsächlich eine n:1 Beziehung zw. tab1 und tab2 besteht.
Was will ich eigentlich konkret?
Ich will eine Schnittstelle schreiben, die es erlaubt eine Einkaufsdatei vom Lieferanten mit unseren Artikelnamen zu ergänzen. Die Einkaufsdatei ist tab1 und die Übersetzungsdatei für unsere Artikel ist tab2. Da in der Einkaufsdatei ein Artikel mehrfach eingetragen sein kann, aber es je Position nur eine Artikelzuordnung geben kann, ist die Beziehung zw. tab1 und tab2 n:1.
Ich möchte also zu jeder Einkaufsposition unseren Artikelnamen anzeigen. Ist noch keine Artikelzuordnung vorhanden, so soll mir die Einkaufsposition trotzdem angezeigt werden.
(tab3 und tab4 lasse ich erstmal außer acht.)
SQL-Code:
SELECT tab1.FeldA, tab2.FeldB, tab3.FeldC, tab4.FeldD
FROM tab1
LEFT OUTER JOIN tab2 ON (tab1.Feld1=tab2.Feld1) AND (tab1.Feld2=tab2.Feld2)
WHERE (tab2.Feld5 IS NULL OR tab2.Feld5=100)
Im Detail habe ich für die Artikelzuordnung zwei Kriterien, was aber keinen Unterschied machen sollte.
Verwende ich nur das WHERE-Kriterium =100, dann erhalte ich korrekterweise nur die Einkaufspositionen für die eine Artikelnamenzuordnung existiert. Verwende ich beide Kriterien, so erhalte ich aber immer noch weniger Einkaufsposition wie vorhanden sind. Insgesamt fehlen 3 Stück.
Gruß
Peter