Объединение двух результатов запроса - PullRequest
0 голосов
/ 03 июля 2019

У меня есть следующие таблицы:

Класс:

Class_ID (PK)
Class
Section_ID

Раздел:

Section_ID (PK)
Section
Teacher_ID

Тема:

Subject_ID (PK)
Subject_Name
Section_ID

Marks:

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 голосов
/ 03 июля 2019

Согласно комментарию от 7 июня, вам, вероятно, следует использовать ВНУТРЕННИЕ СОЕДИНЕНИЯ, а не эти перекрестные соединения, но оба работают, и это просто на вкус.

И вы уже правы в том, что вам просто нужно соединить оба запроса. Ваш запрос с наибольшей оценкой должен только возвращать поля идентификатора, а не какой-либо текст, а затем включать его в качестве подзапроса в ваш первый запрос.

Если вы используете сохраненные запросы в Access, тогда построитель запросов упрощает их визуализацию.

Если нет, и вы хотите использовать SQL, вставьте подзапрос, поместив код SQL для подзапроса в скобки, а затем присвоив ему псевдоним. Затем вы можете обращаться с ним как с таблицей.

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

Легче визуализировать с помощью внутренних соединений. На самом деле, я не помню, чтобы когда-нибудь делал так с вашим методом соединения. КРЕСТНЫЕ СОЕДИНЕНИЯ, НАРУЖНЫЕ СОЕДИНЕНИЯ. У него много имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...