Heim >Datenbank >MySQL-Tutorial >Wie kann ich unveränderte Reservierungen effizient aus einer Datenbank abrufen?
Datenbankabfrage für unveränderte Reservierungen
Dieser Artikel befasst sich mit dem effizienten Abruf unveränderter Reservierungen aus einer Datenbank mit zwei Tabellen: reservation
und reservation_log
. Eine einfache WHERE
-Klausel ist nicht ideal, um nicht stornierte Reservierungen zu finden; Es ist ein ausgefeilterer Ansatz erforderlich.
Methode 1: Ausschluss mittels NOT IN
Eine Methode nutzt die Negation, um stornierte Reservierungen auszuschließen. Wir identifizieren stornierte Reservierungen in reservation_log
und schließen ihre IDs aus der reservation
-Tabelle aus:
<code class="language-sql">SELECT * FROM reservation WHERE id NOT IN ( SELECT reservation_id FROM reservation_log WHERE change_type = 'cancel' );</code>
Methode 2: Optimierte Abfrage mit LEFT JOIN
Für eine bessere Leistung, insbesondere bei indizierten Spalten, wird ein LEFT JOIN
empfohlen:
<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>
Dieser LEFT JOIN
gibt alle Zeilen aus der Tabelle reservation
zurück. Passende Zeilen aus reservation_log
(wo eine Stornierung vorliegt) werden einbezogen. Die WHERE l.id IS NULL
-Klausel filtert die Ergebnisse und gibt nur Reservierungen ohne passenden Stornierungseintrag in reservation_log
zurück.
Beide Methoden rufen nicht stornierte Reservierungen effektiv ab. Der LEFT JOIN
-Ansatz bietet im Allgemeinen eine überlegene Leistung. Die Wahl der besten Methode hängt von der Datenbankgröße und der Indizierung ab.
Das obige ist der detaillierte Inhalt vonWie kann ich unveränderte Reservierungen effizient aus einer Datenbank abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!