Sql 找到给定课程的所有先决条件
我有以下表格: 课程预科 我的问题是:我如何获得一个学生在学习课程id 6之前需要学习的所有课程id 预期答案:我应该获得课程id 1、2、3、4、5 尝试:我已尝试选择预期最终课程id 6的先决条件课程id,并将其嵌套在其他select语句中,以获得先决条件课程id的完整列表,但我仍坚持实现它,我认为这不是一个可行的解决方案Sql 找到给定课程的所有先决条件,sql,postgresql,hierarchical-data,recursive-query,Sql,Postgresql,Hierarchical Data,Recursive Query,我有以下表格: 课程预科 我的问题是:我如何获得一个学生在学习课程id 6之前需要学习的所有课程id 预期答案:我应该获得课程id 1、2、3、4、5 尝试:我已尝试选择预期最终课程id 6的先决条件课程id,并将其嵌套在其他select语句中,以获得先决条件课程id的完整列表,但我仍坚持实现它,我认为这不是一个可行的解决方案 从“课程”先决条件中选择先决条件“课程”id,其中课程id=6您想要递归CTE: with recursive cte as ( select prerequ
从“课程”先决条件中选择先决条件“课程”id,其中课程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;
是一个dbfiddle。您想要一个递归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;
是一个dbfiddle。考虑使用递归查询:
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
考虑使用递归查询:
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@JustAPerson . . . 您需要有一个固定数量的联接,在本例中为5个。这个解决方案是不可推广的。不使用递归查询是否可以做到这一点?因为在我的生活中还没有人教过我course@JustAPerson . . . 您需要有一个固定数量的联接,在本例中为5个。而解决方案也不可能一概而论。