Я бы на твоем месте все-таки таблицы-то переделал. А то так и будешь глюки находить, ты ж считай, каждый раз новое ТЗ ставишь - теперь выясняется, что мало того, что может быть несколько комнат с NULL-полями в enddata, что изначально ВООБЩЕ НЕ РАССМАТРИВАЛОСЬ, так еще могут быть комнаты с одним и тем же id как с пустыми полями id_organizations, так и с заполненными, да еще и как с пустым enddata, так и с НЕпустым. И все опять заново. Надоело... Вот так перепиши третий UNION:
UNION -- добавляем те комнаты, у которых в organizations_rooms id_organizations is NULL
SELECT
organizations_rooms.id_rooms AS ID,
rooms.name AS roomname,
rooms.checkbool AS checkbool,
'' AS orgname
FROM rooms
INNER JOIN organizations_rooms
ON rooms.id = organizations_rooms.id_rooms
WHERE 0 = (SELECT COUNT(id_rooms) FROM organizations_rooms WHERE id_rooms = rooms.id AND id_organizations IS NOT NULL) -- проверить, что не включена эта же комната в предыдущей части запроса
GROUP BY organizations_rooms.id_rooms, rooms.name, rooms.checkbool, organizations_rooms.id_organizations, organizations_rooms.enddata
HAVING (((organizations_rooms.id_organizations) IS NULL) AND ((organizations_rooms.enddata) IS NULL))
, и займись переделыванием. Нельзя в одной таблице хранить и текущие и архивные данные (никому уже нафиг не нужные) Как только срок аренды закончился - немедленно переносить данные с таблицу archive, и не маяться неизвестно чем, потом одним простым запросом по organizations_rooms будешь вытаскивать информацию, безо всяких UNION-ов, а если кому-то понадобится статистика - то работать будешь с архивной таблицей. Все очень просто.
Я больше править недочеты
проектирования не буду. Неинтересно и скучно...