Hallo,
ich hänge gerade an einer (wahrscheinlich simplen) SQL-Abfrage:
Ich habe 2 Tabellen. In einer sind die Produkte gespeichert, und in der anderen sind Produkte markiert, die nicht mit ausgegeben werden sollen:
Tabelle 1:
| id | best-nr | beschreibung | ... |
|
-----
Tabelle 2: id
Mein Versuch:
SELECT id, best-nr, beschreibung FROM tabelle1 tab1, tabelle2 tab2 WHERE tab1.id != tab2.pid
liefert mir die Produkte in Tabelle 1 in x-facher Ausführung (Wahrscheinlich so oft, wie die id nicht in Tabelle 2 vorkommt)
Genau! Mit einem INNER JOIN geht das nicht.
SELECT Tabelle1.id, Tabelle1.[best-nr], Tabelle1.beschreibung
FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle1.id = Tabelle2.pid
WHERE Tabelle2.pid Is Null;
Left Joins beinhalten _alle_ Datensätze der links stehenden Tabelle, also Tabelle1, und nur die Datensätze aus der rechts stehenden Tabelle, also Tabelle2, bei denen die Inhalte der verknüpften Felder gleich sind. Die Felder der Datensätze aus Tabelle2, die _keine_ Entsprechung in Tabelle1 haben, werden mit NULL als Inhalt dargestellt. Filterst Du also diese NULL-Werte eines Feldes aus Tabelle2 heraus, hast Du alle Datensätze aus Tabelle1, die _keine_ Entsprechung in Tabelle2 haben.
viele Grüße
Axel