Requête de base de données pour les réservations non modifiées
Cet article aborde la récupération efficace des réservations non modifiées à partir d'une base de données comportant deux tables : reservation
et reservation_log
. Une simple clause WHERE
n'est pas idéale pour retrouver des réservations non annulées ; une approche plus sophistiquée est nécessaire.
Méthode 1 : Exclusion à l'aide de NOT IN
Une méthode utilise la négation pour exclure les réservations annulées. Nous identifions les réservations annulées en reservation_log
et excluons leurs identifiants du tableau reservation
:
<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 : Requête optimisée avec LEFT JOIN
Pour de meilleures performances, notamment avec les colonnes indexées, un LEFT JOIN
est recommandé :
<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>
Ce LEFT JOIN
renvoie toutes les lignes de la table reservation
. Les lignes correspondantes de reservation_log
(où une annulation existe) sont incluses. La clause WHERE l.id IS NULL
filtre les résultats et renvoie uniquement les réservations sans entrée d'annulation correspondante dans reservation_log
.
Les deux méthodes récupèrent efficacement les réservations non annulées. L’approche LEFT JOIN
offre généralement des performances supérieures. Le choix de la meilleure méthode dépend de la taille de la base de données et de l'indexation.
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!