Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql中3个表的内部连接_Mysql_Database_Inner Join - Fatal编程技术网

mysql中3个表的内部连接

mysql中3个表的内部连接,mysql,database,inner-join,Mysql,Database,Inner Join,我想从更多具有内部联接的表中选择数据 这些是我的桌子 Student (studentId, firstName, lastname) Exam (examId, name, date) Grade (gradeId, fk_studentId, fk_examId, grade) 我想写一份声明,说明所有学生参加的考试、成绩和日期。按日期排序 这是我的声明。它运行,但我想确保我做得正确 SELECT student.firstname, student.lastname, exa

我想从更多具有内部联接的表中选择数据

这些是我的桌子

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

正确的说法应该是:

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上,因为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

这里面有什么问题?gradeID列与studentID连接看起来很奇怪?但若你们把结构放在那个里,它会返回你们期望的结果,那个么我猜它是好的……是的,你们做得对。我对mysql不太熟悉,我想确定我做得对。很多时候,我都说了一些正确的话。但这不是正确的方法。在我看来,运行你的语句时,student.studendId=grade.fk_studentId和Exam.examId=grade.fk_examId。是说错误代码:1054。“on子句”@user2231285中的未知列“grade.fk_studentId”您将年级的表定义为
grade(gradeId,fk_studentId,fk_examId,grade)
。因此,它应该有这个答案中所写的专栏,而不是关于这个主题的另一个评价很高的专栏@Ajokoshi的回复真的很好,谢谢。当你发表声明时。是说错误代码:1054。“on子句”中的未知列“grade.fk_studentId”-与@AjoKoshy给您的答案相同!如果您没有字段
grade.fk_studentId
,则必须使用正确的字段。
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