Maison >base de données >tutoriel mysql >Comment récupérer des réservations non annulées à partir d'une base de données avec des journaux de réservation ?
Cet article présente deux méthodes de requête SQL pour récupérer les réservations non annulées à partir d'une base de données contenant les tables reservation
et reservation_log
. Une réservation n'est considérée comme annulée que si une entrée correspondante avec change_type = 'cancel'
existe dans le tableau reservation_log
.
Méthode 1 : NOT IN
Sous-requête
Cette approche utilise une sous-requête pour identifier les réservations annulées, puis les exclut des résultats de la requête principale :
<code class="language-sql">SELECT * FROM reservation WHERE id NOT IN ( SELECT reservation_id FROM reservation_log WHERE change_type = 'cancel' );</code>
La requête interne sélectionne toutes les reservation_id
valeurs associées aux annulations. La requête externe renvoie alors toutes les réservations dont id
n'est pas présente dans cette liste d'annulation.
Méthode 2 : LEFT JOIN
avec IS NULL
Condition
Cette méthode utilise un LEFT JOIN
pour combiner les tables reservation
et reservation_log
. La condition JOIN
garantit que seules les annulations sont prises en compte. La clause WHERE
filtre les lignes pour lesquelles aucune annulation correspondante n'est trouvée :
<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>
Le LEFT JOIN
renvoie toutes les lignes de la table reservation
(r
). S'il existe une annulation correspondante, les données reservation_log
(l
) correspondantes sont incluses ; sinon, l.id
sera NULL
. La condition WHERE l.id IS NULL
filtre les lignes avec les annulations correspondantes, isolant ainsi efficacement les réservations non annulées. Seules les données de réservation (r.*
) sont sélectionnées dans le résultat final.
Les deux méthodes aboutissent au même résultat, en fournissant une liste des réservations non annulées. Le choix entre eux dépend souvent de considérations de performances spécifiques au système de base de données et au volume de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!