【发布时间】:2019-02-10 10:15:40
【问题描述】:
我有以下表格:
课程
+----------+-------------------------+
| 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 |
+-----------+------------------------+
我的问题是:给定学生已完成的课程 ID 列表,我如何获得学生有资格参加的课程列表?
示例
如果学生已完成course_id 2,则查询应返回课程:1,(因为它没有先决条件)和 3 但不是 4,因为 4 也有 1,3 作为先决条件。
尝试解决方案
我曾尝试对已完成课程 2 的学生使用 IN 语句:
SELECT DISTINCT course_id FROM COURSE_PREREQUISITES
WHERE prerequisite_course_id IN (2)
但它显然失败了,因为它返回的所有课程至少满足一个不是我需要的先决条件。
我遇到了一个类似的问题: Select rows that match all items in a list。但是提供的解决方案在我的情况下不起作用,因为课程的先决条件数量不固定。
最后,我还想知道 NOSQL 数据库(couchDB、mongoDB)是否更适合此类问题。
【问题讨论】: