查找给定课程的所有先决条件
Find ALL the prerequisites for a given course
我有以下表格:
COURSE_PREREQUISITES
+----------+-------------------------+
| course_id | prerequisite_course_id |
+-----------+------------------------+
| 2 | 1 |
+-----------+------------------------+
| 3 | 2 |
+-----------+------------------------+
| 3 | 5 |
+-----------+------------------------+
| 4 | 3 |
+-----------+------------------------+
| 6 | 4 |
+-----------+------------------------+
我的问题是:我怎样才能获得学生在上 course id
6 之前需要上的所有课程 ID?
预期答案:我应该得到1,2,3,4,5的course id
尝试次数: 我已经尝试 selecting 预期最终 course id
6 的 prerequisite_course_id
,并将其嵌套在其他 select 语句以获得 prerequisite_course_id
的完整列表,但我坚持执行它,我认为这也不是一个可行的解决方案。
SELECT prerequisite_course_id FROM course_prerequisites WHERE course_id = 6
您想要递归 CTE:
with recursive cte as (
select prerequisite_course_id
from course_prerequisites
where course_id = 6
union all
select cp.prerequisite_course_id
from cte join
course_prerequisites cp
on cte.prerequisite_course_id = cp.course_id
)
select *
from cte;
Here 是一个 db<>fiddle.
考虑使用递归查询:
with recursive cte as (
select prerequisite_course_id from course_prerequisites where course_id = 6
union all
select cr.prerequisite_course_id
from cte ct
inner join course_prerequisites cr on cr.course_id = ct.prerequisite_course_id
)
select * from cte
我有以下表格:
COURSE_PREREQUISITES
+----------+-------------------------+
| course_id | prerequisite_course_id |
+-----------+------------------------+
| 2 | 1 |
+-----------+------------------------+
| 3 | 2 |
+-----------+------------------------+
| 3 | 5 |
+-----------+------------------------+
| 4 | 3 |
+-----------+------------------------+
| 6 | 4 |
+-----------+------------------------+
我的问题是:我怎样才能获得学生在上 course id
6 之前需要上的所有课程 ID?
预期答案:我应该得到1,2,3,4,5的course id
尝试次数: 我已经尝试 selecting 预期最终 course id
6 的 prerequisite_course_id
,并将其嵌套在其他 select 语句以获得 prerequisite_course_id
的完整列表,但我坚持执行它,我认为这也不是一个可行的解决方案。
SELECT prerequisite_course_id FROM course_prerequisites WHERE course_id = 6
您想要递归 CTE:
with recursive cte as (
select prerequisite_course_id
from course_prerequisites
where course_id = 6
union all
select cp.prerequisite_course_id
from cte join
course_prerequisites cp
on cte.prerequisite_course_id = cp.course_id
)
select *
from cte;
Here 是一个 db<>fiddle.
考虑使用递归查询:
with recursive cte as (
select prerequisite_course_id from course_prerequisites where course_id = 6
union all
select cr.prerequisite_course_id
from cte ct
inner join course_prerequisites cr on cr.course_id = ct.prerequisite_course_id
)
select * from cte