User finden, die KEINEN Termin gebucht haben

McMay

Mitglied
Hallo, ich will in meinem PHP Projekt die User einer Firma finden, die an einem bestimmten Tag KEINEN Termin gebucht haben. Das ganze sollte möglichst schon in der SQL Abfrage der DB stattfinden. Ich stehe z.Zt. wohl voll auf dem Schlauch. Ich bekomme immer die User angezeigt, die an dem Tag einen Termin gebucht haben. Ich will aber eben nicht diese sondern die verbleibenden als Ergebnis haben. Diese will ich per Email auf freie Termine aufmerksam machen.
Hier meine SQL abfrage bis jetzt:
Code:
SELECT `Email` FROM `Customer`, `Reservation` WHERE 
`Customer`.`CompanyID`  = 3 AND
`Reservation`.`Datum` = '2010-09-09' AND
`Reservation`.`CustomerID` = `Customer`.`CustomerID`
Diese Abfrage gibt natürlich nur die Kunden aus die an diesem Tag gebucht haben. Aber wie frage ich nun die anderen ab.
Bin über jeden 'Wink mit dem Zaunpfahl' dankbar.
Gruß Heiko

P.S. Ich bastele gerade auch an `Reservation`.`Datum` != xxx
und SELECT DISTINCT Email from...
bekomme dabei aber noch immer nicht nur die User die an diesem einen Tag keinen Termin gebucht haben. Langsam bin ich am verzweifeln...
 
Zuletzt bearbeitet:
Wenn du schreibst:

SQL:
... Datum <> '2010-09-09' ...

oder auch

SQL:
... Not Datum = '2010-09-09' ...

dann müsste es doch gehen?!
 
Das dachte ich mir dann ja auch. Aber wenn ich
SQL Code:
Code:
Datum != '2010-09-09'
oder
Code:
Datum <> '2010-09-09'
schreibe, werden nur die User aussortiert, die noch nie einen Termin gebucht haben. Alle anderen hatten ja auch zu anderen Zeitpunkten mal einen Termin gebucht. Es muss also, denke ich, irgendwie mit einer Unterabfrage gearbeitet werden. Aber wie?
 
Mit einem Left Join

SQL:
SELECT Email
FROM
	Customer AS C
	LEFT JOIN (
		SELECT CustomerID
		FROM Reservation
		WHERE Reservation.Datum = '2010-09-09'
	) AS R
		ON R.CustomerID = C.CustomerID
WHERE R.CustomerID IS NULL;
 
Zuletzt bearbeitet von einem Moderator:
Super!
Herzlichen Dank, das war es.
Hab noch die CompanyID hinzugefügt, damit ich nur die User einer bestimmten Firma bekomme und damit hab ich es.
Ich werde mich mal mit den LEFT JOIN beschäftigen, hab das wohl noch nicht so kapiert.
 
Das Problem an deiner Lösung war das folgende.
Du verknüpfst beide Tabellen im WHERE. Damit werden von beiden Tabellen nur diejenigen Datensätze genommen, die in beiden Tabellen Einträge haben. Mit dem LEFT JOIN nimmst du von der ersten Tabelle alle Einträge und von der Zweiten nur die passenden Einträge. Mit der IS NULL-Abfraeg im WHERE such ich alle raus, die ebee keine passenden Einträge in der zweiten Tabelle besitzen.
 
Zurück