MySQL - Nicht-Abfrage erweitern

Sprint

Erfahrenes Mitglied
Hallo zusammen,

ich muß hier eine DB Abfrage erweitern, wo ich überhaupt keine Idee habe, wie ich das anstellen soll. Es geht um die Auflistung von Fahrzeugen, für die noch keine Rechnung erstellt wurde, also in der Tabelle mit den Rechnungsnummern kein Eintrag vorhanden ist.
Bisher funktioniert das so:
Code:
SELECT kfz.* FROM kfz LEFT JOIN rechnr ON kfz.kfznr = rechnr.kfznr 
WHERE zahleingang != '0000-00-00' AND zahlart != '4' AND zahlart != '5' 
AND geloescht = '0' AND (rechnr.kfznr IS NULL OR storno =  '1') ORDER BY kfznr DESC;
Das "OR storno = '1'" hatte ich noch eingefügt, da sonst keine Fz gefunden wurden, bei denen früher mal eine Rechnung storniert wurde.
Jetzt kann es aber sein, daß eine Rechnung storniert wurde, das Fz später dann aber doch noch verkauft wurde. Es existieren also in der RechNr-Tabelle zwei Einträge mit der gleichen Fahrzeugnummer, einmal storniert und einmal nicht. Das ist auch richtig so, nur werden bei der obigen Abfrage diese dann auch gefunden, da die Abfrage durch das storno = '1' ja wahr ist.
Wie müßte die Abfrage so geändert werden, daß nur Datensätze ausgegeben werden, deren kfznr entweder nicht oder nur in stornierten Datensätzen vorkommen.
Ich hoffe, das ist verständlich ausgedrückt und es hat auch jemand eine Lösung für mich. Ich steh da völlig auf dem Schlauch.

Danke schonmal im Voraus,
Sprint
 
prüf einfach mit AND auf ungleich Storno
SQL:
WHERE
    rechnr.kfznr IS NULL 
    AND storno <>  '1'
 
Zuletzt bearbeitet von einem Moderator:
Nee, das geht nicht, da das storno Feld ja bei allen Rechnungen auf 0 steht und damit ungleich 1 ist und so werden dann alle Fahrzeuge aufgelistet, für die eine Rechnung existiert. Zur vielleicht besseren Erläuterung die vier möglichen Fälle:
FzNummer - Rechnungsnummer - Storno

40001 - 10001 - 0 --> nicht anzeigen

40002 - 10002 - 1 --> anzeigen

40003 - 10003 - 1 \
40003 - 10004 - 0 --> nicht anzeigen

kein Datensatz vorhanden --> anzeigen
 
Wenn ich nun in den Rechnungsnummern einfach mal nur diejenigen nehme, die eine 0 haben und alle 1 ignoriere und erst das Resultat auf NULL prüfe, dann müsst es gehen.
SQL:
SELECT 
	kfz.* 
FROM 
	kfz 
	LEFT JOIN (SELECT kfznr  FROM rechnr WHERE storno = 0) AS r
		ON kfz.kfznr = r.kfznr 
WHERE 
	r.kfznr IS NULL
 
Zuletzt bearbeitet von einem Moderator:
Ja, jetzt sieht das Ergebnis so aus, wie es soll.
Danke für deine Hilfe und ein schönes Wochenende.
 

Neue Beiträge

Zurück