连接两个查询结果

时间:2019-07-03 05:01:30

标签: sql ms-access

我有下表:

班级:

Class_ID (PK)
Class
Section_ID

部分:

Section_ID (PK)
Section
Teacher_ID

主题:

Subject_ID (PK)
Subject_Name
Section_ID

标记:

Student_ID (CK)
Subject_ID (CK)

学生:

Student_ID (PK)
Student_Name
Section_ID

老师:

Teacher_ID (PK)
Teacher_Name
Subject_ID

我生成了以下两个查询,

用于显示每个班级和每个部分的每个学生的成绩

SELECT 
    Marks.Student_ID, Class, Section.Section, Subject.Subject_Name, Marks.Marks
FROM 
    Marks, Student, [Section], Class, Subject
WHERE 
    Marks.Student_ID=Student.Student_ID 
    AND Student.Section_ID = Section.Section_ID 
    AND Section.Section_ID = Class.Section_ID 
    AND Marks.Subject_ID = Subject.Subject_ID
GROUP BY 
    Marks.Student_ID, Section.Section_ID, Section.Section, Class.Class, Marks.Marks, Subject.Subject_Name

这是每个科目的最高分

SELECT 
    Class.Class, Subject.Subject_Name,MAX(Marks.Marks) AS Total_Marks
FROM 
    Marks, Class, Student, [Section], Subject
WHERE 
    Marks.Student_ID = Student.Student_ID 
    AND Student.Section_ID = Section.Section_ID 
    AND Section.Section_ID = Class.Section_ID 
    AND Marks.Subject_ID = Subject.Subject_ID
GROUP BY 
    Class.Class, Subject.Subject_Name

我想生成一个查询,该查询可以显示第二个查询的student_id,该查询的每个科目的每个班级得分最高

我想加入前两个查询可以解决问题,但由于我刚开始学习SQL和MS Access,因此最欢迎其他建议。

1 个答案:

答案 0 :(得分:0)

根据6月7日的评论,您可能应该使用INNER JOINs而不是这些交叉联接,但是两者都有效,这只是一种味道。

您已经正确了,您只想连接两个查询。您得分最高的查询只需要返回ID字段,而不是任何文本,然后将其作为子查询包含在您的第一个查询中。

如果您在Access中使用保存的查询,那么“查询”构建器将使其非常容易可视化。

如果否,并且您想使用SQL,则通过将子查询的SQL代码放在方括号中,然后为其命名,以插入子查询。然后,您可以像对待表一样对待它。

FROM Marks, Student, [Section], Class, Subject, (SELECT.... ) TopMarks WHERE ... AND TopMarks.SubjectID = Subject.SubjectID AND TopMarks.ClassID = Class.ClassID

使用内部联接更易于可视化。实际上,我不记得曾经用您的加入方法这样做过。交叉联接,外部联接。它有很多名字。