Home >Database >Mysql Tutorial >How to Retrieve Uncancelled Reservations from a Database with Reservation Logs?
This article demonstrates two SQL query methods for retrieving uncancelled reservations from a database containing reservation
and reservation_log
tables. A reservation is considered cancelled only if a corresponding entry with change_type = 'cancel'
exists in the reservation_log
table.
Method 1: NOT IN
Subquery
This approach uses a subquery to identify cancelled reservations and then excludes them from the main query's results:
<code class="language-sql">SELECT * FROM reservation WHERE id NOT IN ( SELECT reservation_id FROM reservation_log WHERE change_type = 'cancel' );</code>
The inner query selects all reservation_id
values associated with cancellations. The outer query then returns all reservations whose id
is not present in this cancellation list.
Method 2: LEFT JOIN
with IS NULL
Condition
This method employs a LEFT JOIN
to combine the reservation
and reservation_log
tables. The JOIN
condition ensures that only cancellations are considered. The WHERE
clause filters for rows where no matching cancellation is found:
<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>
The LEFT JOIN
returns all rows from the reservation
table (r
). If a matching cancellation exists, the corresponding reservation_log
data (l
) is included; otherwise, l.id
will be NULL
. The WHERE l.id IS NULL
condition filters out rows with matching cancellations, effectively isolating the uncancelled reservations. Only the reservation data (r.*
) is selected in the final result.
Both methods achieve the same outcome, providing a list of uncancelled reservations. The choice between them often depends on performance considerations specific to the database system and data volume.
The above is the detailed content of How to Retrieve Uncancelled Reservations from a Database with Reservation Logs?. For more information, please follow other related articles on the PHP Chinese website!