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