SQL 查询 间接先修课程
时间: 2023-12-07 14:05:09 浏览: 100
假设有以下课程表:
| 课程编号 | 课程名称 |
| -------- | -------- |
| 1 | 数据结构 |
| 2 | 算法 |
| 3 | 数据库 |
| 4 | 计算机网络 |
| 5 | 操作系统 |
| 6 | 编译原理 |
| 7 | 计算机组成原理 |
以及以下先修课程表:
| 先修课程编号 | 课程编号 |
| ------------ | -------- |
| 1 | 2 |
| 3 | 5 |
| 4 | 7 |
我们想要查询间接先修课程,也就是间接对某一课程有影响的先修课程。
例如,对于课程编号为 5 的课程,它的直接先修课程编号为 3,但是 3 又依赖于 7,因此 5 的间接先修课程为 3 和 7。
查询间接先修课程的 SQL 语句如下:
```
WITH RECURSIVE indirect_prerequisite(course_id, prerequisite_id) AS (
SELECT course_id, prerequisite_id
FROM prerequisites
WHERE course_id = 5 -- 想要查询的课程编号
UNION
SELECT p.course_id, p.prerequisite_id
FROM prerequisites p
JOIN indirect_prerequisite ip ON p.course_id = ip.prerequisite_id
)
SELECT prerequisite_id
FROM indirect_prerequisite;
```
这个查询使用了递归公共表达式(WITH RECURSIVE)来实现。首先,我们选出了课程编号为 5 的课程的直接先修课程。然后,我们将这些先修课程的编号作为新的 course_id,再次查询它们的先修课程,直到没有更多的先修课程可以查询。最后,我们选出所有查询到的先修课程编号作为查询结果。
阅读全文