Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 找到给定课程的所有先决条件_Sql_Postgresql_Hierarchical Data_Recursive Query - Fatal编程技术网

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

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 6之前需要学习的所有课程id

预期答案:我应该获得课程id 1、2、3、4、5

尝试:我已尝试选择预期最终课程id 6的先决条件课程id,并将其嵌套在其他select语句中,以获得先决条件课程id的完整列表,但我仍坚持实现它,我认为这不是一个可行的解决方案


从“课程”先决条件中选择先决条件“课程”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个。而解决方案也不可能一概而论。