查找给定课程的所有先决条件

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