Étant donné deux tables, booking et booking_log, où booking contient des informations générales sur la réservation et booking_log suit les modifications apportées aux réservations (y compris les annulations), la tâche est d'extraire les réservations qui n'ont pas été annulées. Une simple clause WHERE fonctionne efficacement pour identifier les réservations annulées, mais elle ne suffit pas lors de la recherche d'enregistrements non annulés.
Heureusement, deux approches peuvent être utilisées pour accomplir cette tâche :
Cette méthode exploite la clause NOT IN pour exclure les réservations avec annulation correspondante records.
SELECT * FROM reservation WHERE id NOT IN ( SELECT reservation_id FROM reservation_log WHERE change_type = 'cancel' );
Une approche alternative consiste à utiliser une opération LEFT JOIN. La jointure de gauche récupère toutes les lignes de la table de réservation et inclut les lignes correspondantes de la table booking_log si elles existent. Les lignes sans enregistrements d'annulation correspondants auront des valeurs NULL dans les colonnes booking_log. La clause WHERE peut alors filtrer ces lignes.
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;
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!