mysql中3个表的内连接
Posted
技术标签:
【中文标题】mysql中3个表的内连接【英文标题】:Inner join with 3 tables in mysql 【发布时间】:2013-04-07 11:02:44 【问题描述】:我想使用内连接从更多表中选择数据。
这些是我的桌子。
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
【问题讨论】:
其中有什么问题? gradeID 列连接到 studentID 看起来很奇怪?但是,如果您以这种方式放置结构并返回您期望的结果,那么我想这很好... 是的,你做得对。虽然它是否有效并给出了预期的结果,但没有太多指向这个问题? 在我看来,student.studendId =grade.fk_studentId 和 Exam.examId =grade.fk_examId 是的,你是对的***.com/questions/14673338/… 【参考方案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
根据定义的外键关系引用其他表。如果您希望数据显示为已查询,则应正确引用 ID。因此,您应该将 id 引用到表中正确的外键,而不是仅仅引用没有定义正确关系的 id
【讨论】:
运行语句时。是说错误代码:1054。'on 子句'中的未知列'grade.fk_studentId' @user2231285 您将等级表定义为Grade (gradeId, fk_studentId, fk_examId, grade)
。所以它应该有查询中写的列
这个答案,而不是关于这个主题的另一个高度评价的答案。 @AjoKoshy 非常好的回应,谢谢。【参考方案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
【讨论】:
运行语句时。是说错误代码:1054。'on 子句'中的未知列'grade.fk_studentId' - 和@AjoKoshy 给你的答案一样!它接缝你没有字段grade.fk_studentId
,所以你必须使用正确的字段。【参考方案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
【讨论】:
请解释GROUP BY
子句在此处的相关性?【参考方案4】:
更专业的代码编写方式是使用“别名”-
SELECT
s.firstname,
s.lastname,
e.name,
e.date,
g.grade
FROM grade AS g
INNER JOIN student AS s
ON s.studentId = g.fk_studentId
INNER JOIN exam AS e
ON e.examId = g.fk_examId
ORDER BY e.date;
【讨论】:
以上是关于mysql中3个表的内连接的主要内容,如果未能解决你的问题,请参考以下文章