2013-04-15 40 views
23

我想從具有內部連接的更多表中選擇數據。與mysql中的3個表的內部連接

這些是我的表格。

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

它看起來很奇怪,列的gradeID連接到studentID?但如果你把結構這樣的方式,它返回的結果,你所期望的,然後我想這是好的... –

+0

是的,你做得很對。沒有太多的問題,但如果它的作品,並給予預期的結果是正確的? –

回答

48

幾乎正確定義一個適當的關係ID ..看看連接,你指錯了場

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

當你運行你的語句。是說錯誤代碼:1054.未知的列'grade.fk_studentId'在'條款' - – 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 

一個表refered到其他定義的外鍵關係的基礎上。如果希望數據顯示爲查詢,則應正確引用標識。所以,你應該參考編號的到合適的外鍵的表,而不是隻是不

+0

快20秒:-)你有我的投票。 – agim

+0

@agim很酷:) –

+0

當你運行你的聲明。說錯誤代碼:1054.'on子句'中的未知列'grade.fk_studentId' – 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