Подтвердить что ты не робот

Внутреннее соединение с 3 таблицами в mysql

Я хочу выбрать данные из большего числа таблиц с помощью Inner join.

Это мои таблицы.

Student (studentId, firstName, lastname)
Exam (examId, name, date)
Grade (gradeId, fk_studentId, fk_examId, grade)

Я хочу написать выражение, которое показывает, какой экзамен, класс и дата совпадают с учениками. Сортировка после даты.

Это мое выражение. Он работает, но я хочу убедиться, что делаю это правильно.

SELECT
  student.firstname,
  student.lastname,
  exam.name,
  exam.date,
  grade.grade
FROM grade
  INNER JOIN student
    ON student.studentId = grade.gradeId
  INNER JOIN exam
    ON exam.examId = grade.gradeId
ORDER BY exam.date
4b9b3361

Ответ 1

Почти правильно.. Посмотрите на соединения, вы обращаетесь к неправильным полям

SELECT student.firstname,
       student.lastname,
       exam.name,
       exam.date,
       grade.grade
  FROM grade
 INNER JOIN student ON student.studentId = grade.fk_studentId
 INNER JOIN exam ON exam.examId = grade.fk_examId
 ORDER BY exam.date

Ответ 2

Правильное утверждение должно быть:

SELECT
  student.firstname,
  student.lastname,
  exam.name,
  exam.date,
  grade.grade
FROM grade
  INNER JOIN student
    ON student.studentId = grade.fk_studentId
  INNER JOIN exam
    ON exam.examId = grade.fk_examId
ORDER BY exam.date

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

Ответ 3

SELECT
  student.firstname,
  student.lastname,
  exam.name,
  exam.date,
  grade.grade
FROM grade
 INNER JOIN student
   ON student.studentId = grade.fk_studentId
 INNER JOIN exam
   ON exam.examId = grade.fk_examId
 GROUP BY grade.gradeId
 ORDER BY exam.date