I have a problem in writing the sql to get the availables rooms from the tables.
My tables structures are given below.
Table Booking
ID | START_DATE
You'll want to define a clear recordsets for "all bookings made on day X", and then use an outer join to retrieve those rooms that don't have a booking for said day.
SET @myDate = #someDay#
SELECT R.ID
FROM Room R
WHERE R.ID NOT IN (
SELECT BR.ROOM_ID
FROM BookingRoom BR
INNER JOIN Booking B ON BR.Booking_ID = B.ID
WHERE @myDate BETWEEN B.start_date and B.end_date
)
Edit:
Since you want ALL open rooms during a reservation, you'll need to do a more complicated query. I'll assume that you already have the dates in question loaded outside, since doing a date-based many-to-many query is a PITA.
SET @dateStart = #Start#
SET @dateEnd = #End#
SELECT R.ID
FROM Room R
WHERE R.ID NOT IN (
SELECT BR.ROOM_ID
FROM BookingRoom BR
INNER JOIN Booking B ON BR.Booking_ID = B.ID
WHERE B.start_date BETWEEN @dateStart AND @dateEnd
AND B.end_date BETWEEN @dateStart AND @dateEnd
)