Hvis jeg har forstået din db-struktur rigtigt, skal du finde en række i rum uden tilsvarende rækker i tilgængelighed.
SELECT r.*
FROM rooms r
LEFT JOIN availability a ON (r.id = a.room_id
AND a.date_occupied BETWEEN :start_date AND :end_date)
WHERE a.id IS NULL