在列SQL中选择列

时间:2017-10-19 19:33:56

标签: sql sql-server

问题:对于所有300个级别的课程(300-399),列出课程编号,必修课程编号和必修课程说明。

对不起,如果这很难理解,我甚至不知道如何表达我的问题。基本上,我正在试图找出这个问题,而且在列出前提条件描述时我完全不知道从哪里开始。

我只需要显示与主菜相关的先决条件描述。

以下是我到目前为止所做的,绝对不完整。该链接是“课程”表的src="{% static 'user.userprofile.picture.url' %}" 查询输出的示例。

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

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

Example Course Table

Course_NO

2 个答案:

答案 0 :(得分:0)

我要做的是使用表别名C1作为原始查询。然后,我将使用表别名C2子查询先决条件课程编号的课程描述。注意我使用表别名-C1和C2-将C2.Course_No号与C1.PREREQUISITE号相关联。从该子查询中选择C2.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

答案 1 :(得分: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