Heim >Datenbank >MySQL-Tutorial >Wie kann ich nicht stornierte Reservierungen von zwei Tischen effizient abrufen?
Eine effektive Methode, um nicht stornierte Reservierungen effizient abzurufen
In diesem Artikel wird erläutert, wie Informationen zu nicht stornierten Reservierungen effizient aus zwei Tabellen (Reservierungstabelle und Reservierungsprotokolltabelle) abgerufen werden können. In der Reservierungstabelle werden Reservierungsdetails gespeichert und in der Reservierungsprotokolltabelle werden Reservierungsänderungen aufgezeichnet.
Eine Möglichkeit besteht darin, zunächst stornierte Reservierungen auszuwählen und sie aus den Ergebnissen auszuschließen. Diese Methode erfordert jedoch zusätzliche Verbindungen zur Abonnementprotokolltabelle, um gekündigte Abonnements abzurufen, was weniger effizient ist.
Eine effizientere Lösung ist die Verwendung der NOT IN
-Klausel in einer Unterabfrage:
<code class="language-sql">SELECT * FROM reservation WHERE id NOT IN (select reservation_id FROM reservation_log WHERE change_type = 'cancel');</code>
Diese Abfrage ruft alle Zeilen in der Tabelle reservation
ab, in denen die Spalte id
nicht im Ergebnis der Unterabfrage enthalten ist. Die Unterabfrage wählt die reservation_log
-Werte in der change_type
-Tabelle aus, wobei das reservation_id
„Abbrechen“ lautet.
Eine andere Möglichkeit besteht darin, die Klauseln LEFT JOIN
und WHERE
zu verwenden:
<code class="language-sql">SELECT r.* FROM reservation r LEFT JOIN reservation_log l ON r.id = l.reservation_id AND l.change_type = 'cancel' WHERE l.id IS NULL;</code>
Diese Abfrage verwendet LEFT JOIN
, um alle Zeilen in der Tabelle reservation
einzuschließen, unabhängig davon, ob sie übereinstimmende Zeilen in der Tabelle reservation_log
haben. Die WHERE l.id IS NULL
-Klausel filtert alle Zeilen in der reservation_log
-Tabelle heraus, in denen eine passende Zeile von change_type='cancel'
vorhanden ist, sodass nur nicht stornierte Reservierungen übrig bleiben.
Das obige ist der detaillierte Inhalt vonWie kann ich nicht stornierte Reservierungen von zwei Tischen effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!