2017-10-19 101 views
-1

问题:对于所有300个级别的课程(300-399),列出课程编号,前提课程编号和前提课程描述。在列中选择列SQL

对不起,如果这是棘手的理解,我甚至不知道如何短语我的问题。基本上,我试图弄清楚这个问题,我完全不知道在列出必备说明时从哪里开始。

我只需要显示与主课程相关的前提描述。

下面是我到目前为止,绝对不完整。该链接是将SELECT *查询输出到课程表的示例。

只是为了澄清:每个Course_NO都有一个先决条件列出。但是,前提条件也是课程表中列出的Course_NO

感谢您提前提供任何帮助,我很感激!

Example Course Table

SELECT 
    Course_No, 
    Prerequisite 
FROM COURSE 
WHERE 
    Course_NO < 400 
    AND Course_NO >= 300 
+0

嗨希拉里,欢迎来到Stack Oveflow。你能不能以这种方式使用图像并输入一些样本数据。图片链接可能会死亡,并且在这里我们总是可以引用它的代码,如果有人有同样的问题 – Moseleyi

+0

一门课程可以有多个1 prereq? – SQLChao

+0

不,每个课程只有一个prereq – Hilary

回答

0

我会做的是使用一个表的别名C1为原始查询。然后,我会使用表别名C2来查询课程描述的前提课程编号。注意我使用了两个表别名--C1和C2--将C2.Course_No号码与C1.PREREQUISITE号码相关联。 C2.DESCRIPTION从此子查询中选择。子查询被赋予列别名[Prerequisite Course Description];请注意,如果没有列别名,则该字段将具有空白标题。

你应该使用递归吗?在这种情况下,你可能不应该尝试这样的解决方案,除非你明确告知这样做。

SELECT C1.Course_No 
     ,C1.PREREQUISITE, 
     ,(SELECT C2.DESCRIPTION 
      FROM COURSE AS C2 
      WHERE C2.Course_No = C1.PREREQUISITE 
     ) AS [Prerequisite Course Description] 
    FROM COURSE AS C1 
    WHERE C1.Course_NO < 400 
     C1.AND Course_NO >= 300 
0

这可以做为self join

SELECT 
    MainCourse.Course_No, 
    PreRequisiteCourse.Description as PreRequisiteDescription 
FROM COURSE as MainCourse 
Inner Join Course as PreRequisiteCourse 
on MainCourse.Prerequisite = PreRequisiteCourse.Course_No 
WHERE 
    MainCourse.Course_NO Between 300 And 399 

如果您有要在结果中包含一些课程没有先决条件,你应该Inner join更改为Left Outer Join