У меня есть следующие таблицы:
КУРС
+----------+-------------------------+
| course_id | course_name |
+-----------+------------------------+
| 1 | s001 |
| 2 | s002 |
| 3 | s003 |
| 4 | s004 |
+-----------+------------------------+
COURSE_PREREQUISITES
+----------+-------------------------+
| course_id | prerequisite_course_id |
+-----------+------------------------+
| 3 | 2 |
+-----------+------------------------+
| 4 | 1 |
+-----------+------------------------+
| 4 | 2 |
+-----------+------------------------+
| 4 | 3 |
+-----------+------------------------+
Мой вопрос: Учитывая список идентификаторов курсов, пройденных студентом, как я могу получить список курсов, в которых студент имеет право участвовать?
Пример
Если учащийся выполнил course_id
2, запрос должен возвращать курсы: 1 (поскольку он не имеет предварительных условий) и 3, но не 4, так как 4 также имеет 1,3 как предварительные условия.
Попытка найти решение
Я пытался использовать такое утверждение IN
, как для студента, который закончил курс 2:
SELECT DISTINCT course_id FROM COURSE_PREREQUISITES
WHERE prerequisite_course_id IN (2)
, но оно, очевидно, не удаетсятак как он возвращает все курсы, которые удовлетворяют по крайней мере одному предварительному условию, а это не то, что мне нужно.
Я столкнулся с подобным вопросом: Выберите строки, соответствующие всем элементам в списке .Но предоставленное решение не работает в моем случае, так как количество предпосылок для курса не является фиксированным.
Наконец, я также хотел бы знать, подходят ли базы данных NOSQL (couchDB, mongoDB) для задачкак это.