web-dev-qa-db-ja.com

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
27
Zincktest

ほぼ正しく..結合を見て、間違ったフィールドを参照しています

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
55
agim

正しいステートメントは次のとおりです。

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に参照する必要があります。

12
Ajo Koshy
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
2
Suhel Meman