Vinzenz Mai: Abfrage über 2 Tabellen, die nur Nichtübereinstimmungen liefert

Beitrag lesen

Hallo

Ich habe zwei MySQL-Tabellen, mit folgender Struktur

welche MySQL-Version?
Subselects, wie von Siechfred vorgeschlagen, unterstützt MySQL ab Version 4.1.

Archiv:
ArchivID
LiteraturID
LagerortID (wird aus einer 3. Tabelle gespeist)

Literatur:
LiteraturID
LiteraturBeschreibung

Das Archiv, weist einer Literaturstelle somit einen Lagerort zu. Eine Literatur kann (auf Grund ihrer Größe) auch an mehreren Lagerorten auftauchen.

Gewünscht ist jetzt eine Abfrage, die mir alle Literaturstellen angibt, die noch nicht eingelagert sind. Ich habe bis jetzt leider keinen geeigneten Ansatz gefunden. DISTINCT und NOT in der Abfrage auf archiv.LiteraturID = Literatur.LiteraturID liefert natürlich alle Literaturstellen zurück. Mit JOIN konnte ich auch kein Ergebnis produzieren.

Warum nicht? Jede mir bekannte MySQL-Version unterstützt den LEFT JOIN und den Vergleich mit NULL-Werten. Selbst mit MySQL 3.23 kannst Du Dein Problem lösen:

Gib mir alle Literaturstellen, für die kein Eintrag im Archiv existiert:

SELECT  
    l.LiteraturID     -- Alle Einträge aus Literatur, gern mit weiteren Details  
FROM Literatur l      -- Aliasnamen ersparen Schreibarbeit :-)  
[link:http://aktuell.de.selfhtml.org/artikel/datenbanken/joins/#leftright_join@title=LEFT JOIN] Archiv a  
ON l.LiteraturID = a.LiteraturID  
WHERE a.LiteraturID [link:http://dev.mysql.com/doc/refman/4.1/en/comparison-operators.html#id2943620@title=IS NULL]   -- für die kein korrespondierender Eintrag in der Tabelle Archiv existiert  

Freundliche Grüße

Vinzenz