Внутреннее соединение с 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
Ответы
Ответ 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