In diesem Artikel werden zwei SQL-Abfragemethoden zum Abrufen nicht stornierter Reservierungen aus einer Datenbank mit den Tabellen reservation
und reservation_log
demonstriert. Eine Reservierung gilt nur dann als storniert, wenn in der Tabelle change_type = 'cancel'
ein entsprechender Eintrag mit reservation_log
vorhanden ist.
Methode 1: NOT IN
Unterabfrage
Dieser Ansatz verwendet eine Unterabfrage, um stornierte Reservierungen zu identifizieren und schließt sie dann aus den Ergebnissen der Hauptabfrage aus:
<code class="language-sql">SELECT * FROM reservation WHERE id NOT IN ( SELECT reservation_id FROM reservation_log WHERE change_type = 'cancel' );</code>
Die innere Abfrage wählt alle reservation_id
Werte aus, die mit Stornierungen verknüpft sind. Die äußere Abfrage gibt dann alle Reservierungen zurück, deren id
nicht in dieser Stornierungsliste vorhanden ist.
Methode 2: LEFT JOIN
mit IS NULL
Bedingung
Diese Methode verwendet ein LEFT JOIN
, um die Tabellen reservation
und reservation_log
zu kombinieren. Die Bedingung JOIN
stellt sicher, dass nur Stornierungen berücksichtigt werden. Die WHERE
-Klausel filtert nach Zeilen, in denen keine passende Stornierung gefunden wird:
<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>
Das LEFT JOIN
gibt alle Zeilen aus der reservation
-Tabelle (r
) zurück. Wenn ein passender Storno vorhanden ist, werden die entsprechenden reservation_log
-Daten (l
) einbezogen; andernfalls wird l.id
zu NULL
. Die WHERE l.id IS NULL
-Bedingung filtert Zeilen mit passenden Stornierungen heraus und isoliert so effektiv die nicht stornierten Reservierungen. Im Endergebnis werden nur die Reservierungsdaten (r.*
) ausgewählt.
Beide Methoden erzielen das gleiche Ergebnis und liefern eine Liste der nicht stornierten Reservierungen. Die Wahl zwischen ihnen hängt häufig von Leistungsüberlegungen ab, die für das Datenbanksystem und das Datenvolumen spezifisch sind.
Das obige ist der detaillierte Inhalt vonWie rufe ich nicht stornierte Reservierungen aus einer Datenbank mit Reservierungsprotokollen ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!