2013-04-15 5 views
23

Я хочу выбрать данные из большего количества таблиц с помощью внутреннего соединения.Внутреннее соединение с 3 таблицами в mysql

Это мои столы.

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 
+0

и в чем проблема? –

+1

Странно, что columnIDID подключен к studentID? но если вы поместите структуру таким образом, и она вернет результаты, которые вы ожидали, то я думаю, что это нормально ... –

+0

Да, вы делаете это правильно. Не так много смысла в вопросе, но если он работает и дает ожидаемые результаты? –

ответ

48

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

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 
+1

20 секунд не имеет значения :) –

+0

Когда вы запустите свое заявление. Is says Код ошибки: 1054. Неизвестные столбцы 'grade.fk_studentId' in 'on clause' - – Zincktest

+0

тот же ответ, что и @AjoKoshy дал вам! Это означает, что у вас нет поля 'grade.fk_studentId', поэтому вместо этого вы должны использовать правильное поле. – agim

10

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

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 

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

+0

20 секунд быстрее :-) У вас есть мой голос. – agim

+0

@agim, это круто :) –

+0

Когда запустите свое заявление. Является ли код ошибки: 1054. Неизвестные столбцы «grade.fk_studentId» в разделе «on» – Zincktest

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 
GROUP BY grade.gradeId 
ORDER BY exam.date 
Смежные вопросы