2013-04-15 14 views
23

Chcę wybrać dane z większej liczby tabel z łączeniem wewnętrznym.Łączenie wewnętrzne z trzema tabelami w mysql

To są moje stoły.

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

Chcę napisać oświadczenie, które pokazuje, do jakiego egzaminu, klasy i daty uczniowie się zaliczają. Posortowane po dacie.

To jest moje oświadczenie. Działa, ale chcę się upewnić, że robię to poprawnie.

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

i na czym polega problem? –

+1

wygląda dziwnie, że columnID klasy jest podłączony do studentID? ale jeśli umieścisz strukturę w ten sposób i zwróci ona oczekiwane rezultaty, to zgaduję, że jest w porządku ... –

+0

Tak, robisz to poprawnie. Nie ma jednak sensu pytanie, czy to działa i czy daje oczekiwane rezultaty? –

Odpowiedz

48

Prawie poprawnie .. Spójrz na przyłącza, do którego się odnosimy niewłaściwych pól

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 sekund, nie ważne :) –

+0

Po uruchomieniu wyciągu. Jest napisane kod błędu: 1054. nieznane kolumny "grade.fk_studentId" w "on klauzula" - – Zincktest

+0

taką samą odpowiedź jak @AjoKoshy dał ci! Szwy nie mają pola 'grade.fk_studentId', więc musisz użyć odpowiedniego pola. – agim

10

Prawidłowe oświadczenie powinno być:

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 

Stół jest odnoszone do innych na podstawie relacji klucza obcego zdefiniowane. Powinieneś poprawnie przekazać identyfikatory, jeśli chcesz, aby dane były wyświetlane jako zapytane. Należy więc odwołać się identyfikator do odpowiednich kluczy obcych w tabeli, a nie tylko na identyfikatorze, który nie określa właściwą relację

+0

20 sekund szybciej :-) Masz mój głos. – agim

+0

@agim to fajne :) –

+0

Po uruchomieniu wyciągu. Jest napisane kod błędu: 1054. nieznane kolumny 'grade.fk_studentId' in 'on klauzula' – 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