Jointure interne avec 3 tables dans mysql
Je veux sélectionner des données de plusieurs tables avec Inner join.
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 l'examen, le grade et la date de tous les étudiants ont été. Tri après jour.
C'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
- et quel est le problème?
- il semble étrange que la colonne gradeID est connecté à studentID? mais si vous mettez de la structure de cette façon et il renvoyer les résultats escomptés alors je suppose que c'est bien ...
- Oui, vous le faites correctement. Pas beaucoup de point à la question de savoir si cela fonctionne et donne des résultats attendus droit?
- Je suis nouveau sur le serveur mysql, et vous voulez être sûr que im faire en droit. Beaucoup de fois j'ai fait quelques déclarations qui a obtenu le droit de chose. Mais ce n'était pas la bonne méthode.
- pour moi, il semble que les étudiants.studendId = grade.fk_studentId et d'Examen.examId = grade.fk_examId
- Oui vous avez raison stackoverflow.com/questions/14673338/...
- poster une description de la table dans ur question. utiliser la requête
describe grade
Vous devez vous connecter pour publier un commentaire.
Presque correctement.. Regardez les jointures, vous faites référence à la mauvaise champs
grade.fk_studentId
, donc vous devez utiliser le champ de droite à la place.La déclaration correcte devrait être :
Un tableau est par rapport à d'autres sur la base de la relation de clé étrangère définie. Vous devriez consulter les identifiants correctement si vous souhaitez que les données de montrer que l'interrogé. Vous devez donc consulter la carte d'identité pour la bonne clés étrangères dans la table, plutôt que de simplement sur l'id qui ne définit pas une bonne relation
Grade (gradeId, fk_studentId, fk_examId, grade)
. Ils devraient donc avoir la colonne comme écrit dans la requête