web-dev-qa-db-fra.com

Jointure interne avec 3 tables dans mysql

Je veux sélectionner des données provenant de plusieurs tables avec jointure interne.

Ce sont mes tables.

Student (studentId, firstName, lastname)
Exam (examId, name, date)
Grade (gradeId, fk_studentId, fk_examId, grade)

Je veux écrire une déclaration qui montre à quel examen, quelle note et quelle date ont été les élèves. Trié après la date.

Ceci est ma déclaration. Il fonctionne, mais je veux m'assurer que je le fais correctement.

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

Presque correctement .. Regardez les jointures, vous faites référence aux mauvais champs

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

La déclaration correcte devrait être:

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

Une table est référée à une autre sur la base de la relation de clé étrangère définie. Vous devez vous référer correctement aux identifiants si vous souhaitez que les données s'affichent comme interrogées. Donc, vous devriez référencer les identifiants aux clés étrangères appropriées dans la table plutôt que simplement à l'identifiant qui ne définit pas une relation correcte

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