2016-12-02 8 views
0

In der Tabelle "Buchung" halte ich Details einer Kundenbuchung (Datum/Uhrzeit/RowNumber). In der Tabelle "Sitz" halte ich Details aller Sitze (RowNumber und Zone) im Theater.Was ist los mit dieser mySQL-Logik?

Der Zweck dieser Abfrage besteht darin, Seat zu buchen, um zu sehen, welche Plätze eingenommen werden, indem die Zeilen in Seat angezeigt werden, die einen Nulleintrag in der entsprechenden Buchungszeilennummer haben. Hier ist der Code:

SELECT s.Zone, s.RowNumber 
FROM Booking b JOIN Seat s 
ON s.RowNumber = b.RowNumber 
WHERE b.PerfDate = '2016-12-12' 
AND b.PerfTime = '20:30:00' 
AND b.RowNumber is null; 

Der Code akzeptiert wird, aber das Ergebnis kommt zurück als leere Menge mit der letzten AND-Anweisung oder einfach nur zeigt, was bei den Buchungen ohne sie ist. Es ist offensichtlich etwas falsch mit der Logik, die ich benutze, aber ich kann es nicht genau feststellen, dass das, was ich versuche, Sinn macht, wenn ich es lese. Wahrscheinlich ein offensichtlicher Fehler, aber einige Hilfe würde geschätzt werden.

Vielen Dank im Voraus.

[Edit - Ich habe den logischen Fehler entdeckt ... es ist die Tatsache, dass ich nach einem bestimmten Datum und einer bestimmten Uhrzeit frage, wenn die Datensätze, die ich will, diese per definitionem nicht haben, aber keine Ahnung, wie man sie umgehen kann. scheint wie Fang 22.]

+0

Warum sollten die eingenommenen Sitze eine Null RowNumber haben? Meinst du, du willst die Sitze finden, die ** nicht ** besetzt sind? – Barmar

+0

@Barmar Das ist, was ich will (Anzeige Sitze nicht genommen) - eine Null RowNumber würde in der Buchung angeben, dass der Platz nicht besetzt ist (oder das ist die Idee), da es noch nicht gebucht wurde. –

Antwort

2

Sie müssen ein LEFT JOIN verwenden und alle Kriterien für die nicht übereinstimmende Zeile in die ON Klausel einfügen.

SELECT s.zone, s.RowNumber 
FROM Seat AS s 
LEFT JOIN Booking AS b 
ON s.RowNumber = b.RowNumber AND b.PerfDate = '2016-12-12' AND b.PerfTime = '20:30:00' 
WHERE b.RowNumber IS NULL 
+0

Schön. Es funktionierte. Danke vielmals! –