SQL-Techniken zum Auffinden nicht stornierter Reservierungen
In diesem Artikel werden zwei effiziente SQL-Methoden zum Abrufen nicht stornierter Reservierungen aus einer Datenbank mit reservation
- und reservation_log
-Tabellen untersucht. Ziel ist es, nur die Reservierungen auszuwählen, für die kein Stornierungsdatensatz vorliegt.
Methode 1: Verwendung von NOT IN
mit einer Unterabfrage
Dieser Ansatz verwendet eine Unterabfrage, um in der Tabelle reservation_log
vorhandene Reservierungs-IDs mit dem change_type
„Abbrechen“ zu identifizieren. Die Hauptabfrage wählt dann Reservierungen aus, deren IDs nicht in dieser Liste sind:
<code class="language-sql">SELECT * FROM reservation WHERE id NOT IN (SELECT reservation_id FROM reservation_log WHERE change_type = 'cancel');</code>
Methode 2: Verwendung von LEFT JOIN
Eine effizientere Alternative verwendet ein LEFT JOIN
, um die Tabellen reservation
und reservation_log
zu kombinieren. Ein LEFT JOIN
gibt alle Zeilen aus der linken Tabelle (reservation
) zurück, auch wenn es in der rechten Tabelle (reservation_log
) keine Übereinstimmung gibt. Wenn keine Übereinstimmung vorliegt, lauten die Spalten der rechten Tabelle NULL
. Durch das Filtern nach NULL
-Werten in der Spalte change_type
werden nicht stornierte Reservierungen isoliert:
<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>
Beide Methoden erzielen das gleiche Ergebnis. Der LEFT JOIN
-Ansatz wird jedoch im Allgemeinen wegen seiner verbesserten Leistung bevorzugt, insbesondere bei größeren Datensätzen, da er die potenziellen Leistungsprobleme vermeidet, die mit NOT IN
-Unterabfragen verbunden sind. Wählen Sie die Methode, die am besten zu Ihrem Datenbanksystem und Datenvolumen passt.
Das obige ist der detaillierte Inhalt vonSo finden Sie nicht stornierte Reservierungen mit SQL: „NOT IN' vs. „LEFT JOIN'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!