Добрый день.
Есть БД, в которой хранятся данные по бронированию аудиторий. В первой таблице хранится время, доступное для выбора. Во второй таблице записывается время из предыдущей таблице и становится забронированным. Требуется получить все промежутки свободного времени.
www.sqlfiddle.com/#!9/aa82ab/1/0
CREATE TABLE `date` (
`hour_id` int(11) NOT NULL,
`minutes_id` int(11) NOT NULL,
`id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `reservation` (
`id` int(11) NOT NULL,
`classroom_id` int(11) NOT NULL,
`datestart_id` int(11) NOT NULL,
`dateend_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `reservation` (`id`, `classroom_id`, `datestart_id`, `dateend_id`) VALUES
(1, 340, 1, 4),
(2, 340, 6, 8);
INSERT INTO `date` (`hour_id`, `minutes_id`, `id`) VALUES
(1, 1, 1),
(1, 2, 2),
(1, 3, 3),
(1, 4, 4),
(2, 1, 5),
(2, 2, 6),
(2, 3, 7),
(2, 4, 8),
(3, 1, 9),
(3, 2, 10),
(3, 3, 11),
(3, 4, 12);
Использовал следующий запрос, но он вытягивает лишнюю первую строку и по результату не понятно в какой именно аудитории есть этот свободный промежуток времени:
Select * From date d where d.id not in(
SELECT d.id FROM date d, reservation r WHERE d.id BETWEEN r.datestart_id+1 and r.dateend_id-1)