Pour rechercher toutes les chambres qui n'ont pas de réservations dans un certain laps de temps, considérez ce qui suit :
SELECT roomID FROM room WHERE roomID NOT IN(
SELECT roomID FROM reservation WHERE startDate < @EndDate AND endDate > @StartDate
)
Que se passe-t-il là-bas ?
Dans la requête interne, je recherche dans la liste des réservations les réservations qui sont au moins partiellement dans le délai requis et j'obtiens leurs identifiants de chambre. Et puis, dans la requête externe, je demande à partir de la table des chambres tous les ID de chambre qui ne sont PAS répertoriés, c'est-à-dire qu'ils n'ont pas de réservation qui soit au moins partiellement dans le délai requis.
@StartDate et @EndDate devraient être modifiés par vous - vous devez y mettre vos variables.