Спасибо за ваши предложения всем. После их рассмотрения я придумал это комбинированное решение PHP / MySQL, которое работает только на MySQL 4 или более поздней версии ...
ВЫБРАТЬ * ИЗ локаций
ГДЕ location.id НЕ В (
ВЫБЕРИТЕ отличную доступность.locationID
ОТ наличия
ГДЕ Наличие.date> = '$ periodStartYMD'
И наличие.date <= '$ periodEndYMD'
GROUP BY locationID
HAVING сумма (наличие.availableRooms) = 0
AND count (Availability.locationID) = $ daysInPeriod) </p>
PHP переменные должны быть самоочевидными.
Подводя итог - Если в периоде меньше записей доступности, чем дней, это указывает на полную доступность записей пропущенных дней. Если есть запись, это означает отсутствие или ограниченную доступность.
Оператор sub-select получает все записи доступности, соответствующие местоположению, у которых общая доступность равна нулю и (бит, который ускользал от меня) - количество совпадающих записей, общее количество дней в периоде.
Таким образом, если для каждого дня имеется запись о доступности, а общее количество свободных мест равно нулю, не должно быть свободных номеров на весь период.
Фу - надеюсь, это что-то вроде и еще раз спасибо ...