Techniques SQL pour rechercher des réservations non annulées
Cet article explore deux méthodes SQL efficaces pour récupérer les réservations non annulées d'une base de données avec les tables reservation
et reservation_log
. L'objectif est de sélectionner uniquement les réservations dépourvues de dossier d'annulation.
Méthode 1 : Utiliser NOT IN
avec une sous-requête
Cette approche utilise une sous-requête pour identifier les identifiants de réservation présents dans la table reservation_log
avec un change_type
de « annuler ». La requête principale sélectionne ensuite les réservations dont les ID ne sont pas dans cette liste :
<code class="language-sql">SELECT * FROM reservation WHERE id NOT IN (SELECT reservation_id FROM reservation_log WHERE change_type = 'cancel');</code>
Méthode 2 : Utiliser LEFT JOIN
Une alternative plus efficace utilise un LEFT JOIN
pour combiner les tables reservation
et reservation_log
. Un LEFT JOIN
renvoie toutes les lignes du tableau de gauche (reservation
), même s'il n'y a aucune correspondance dans le tableau de droite (reservation_log
). Si une correspondance est absente, les colonnes du tableau de droite seront NULL
. Le filtrage des valeurs NULL
dans la colonne change_type
isole les réservations non annulées :
<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>
Les deux méthodes aboutissent au même résultat. Cependant, l'approche LEFT JOIN
est généralement préférée en raison de ses performances améliorées, en particulier avec des ensembles de données plus volumineux, car elle évite les problèmes de performances potentiels associés aux sous-requêtes NOT IN
. Choisissez la méthode qui convient le mieux à votre système de base de données et à votre 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!