2013-04-15 43 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