У меня ограниченный опыт работы с соединениями, и эта головоломка поставила меня в тупик.
Вот соответствующие таблицы из моей базы данных mysql:
- Студенческий стол
- Таблица разделов, описывающая разделы данного курса
- Таблица сопоставления, которая создает отношения «многие ко многим» между разделами и учащимися.
- Таблица экзаменов с описанием экзаменов
- Таблица сопоставления «многие ко многим» между экзаменами и разделами
- Таблица exam_schedules, описывающая дни, в которые можно сдавать экзамены. Между экзаменами и расписанием экзаменов существует отношение "один ко многим".
Моя цель: найти всех учащихся, зарегистрированных в секциях, экзамены которых запланированы на определенную дату. Также получите информацию о расписании экзаменов для каждого теста, который студент должен пройти в указанную дату. Желательно иметь строку в результирующем наборе для каждой пары student‹->exam_schedule.
У меня есть запрос, который выполняет первую половину моей цели (у него много подзапросов):
SELECT * FROM `students` WHERE `id` IN
(SELECT `student_id` FROM `sections_students` WHERE `section_id` IN
(SELECT `section_id` FROM `sections_exams` WHERE `exam_id` IN
(SELECT `exam_id` FROM `exam_schedules` WHERE `date` = DATE('$date') AND `exam_id` IN
(SELECT `id` FROM `exams` WHERE `isAutoSignup` = 1))))
Чего я не могу понять, так это того, как включить в это соединение, чтобы выполнить вторую половину моей цели. Каждая моя попытка приводила к синтаксической ошибке. Пожалуйста, может ли кто-нибудь указать мне в правильном направлении? Заранее спасибо!