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 ?

Comment récupérer des réservations non annulées à partir d'une base de données avec des journaux de réservation ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-23 19:37:09538parcourir

How to Retrieve Uncancelled Reservations from a Database with Reservation Logs?

Identifier les réservations actives dans une base de données

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn