Aby wyszukać wszystkie pokoje, które nie mają rezerwacji w określonym przedziale czasowym, rozważ następujące kwestie:
SELECT roomID FROM room WHERE roomID NOT IN(
SELECT roomID FROM reservation WHERE startDate < @EndDate AND endDate > @StartDate
)
Co się tam dzieje?
W wewnętrznym zapytaniu przeszukuję listę rezerwacji pod kątem rezerwacji, które przynajmniej częściowo mieszczą się w wymaganych ramach czasowych, i otrzymuję ich identyfikatory pokoi. A następnie, w zewnętrznym zapytaniu, żądam od tabeli pokoi wszystkich identyfikatorów pokoi, które NIE są wymienione, to znaczy nie mają rezerwacji, która przynajmniej częściowo mieści się w wymaganym przedziale czasowym.
@StartDate i @EndDate musiałyby zostać zmodyfikowane przez Ciebie - musisz tam umieścić swoje zmienne.