Maison >base de données >tutoriel mysql >Comment trouver des réservations non annulées à l'aide de SQL : « NOT IN » vs « LEFT JOIN » ?

Comment trouver des réservations non annulées à l'aide de SQL : « NOT IN » vs « LEFT JOIN » ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-23 19:42:11842parcourir

How to Find Uncancelled Reservations Using SQL: `NOT IN` vs. `LEFT JOIN`?

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!

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