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
Libérer: 2025-01-23 19:42:11
original
772 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal