Comment retourner des valeurs null à l'aide de SQL Left Join
Veuillez jeter un oeil à ce SQL jouer du Violon pour les tables et les requêtes que j'ai essayé:
SQL Violon
Donc en gros, j'ai deux tables à savoir tbl_curriculum et tbl_enrolled_subjects.
tbl_curriculum contient tous les sujets (subject_id) un étudiant doit prendre sur la base de son cours (course_id).
tbl_enrolled_subjects contient tous les thèmes de l'étudiant a pris/inscrits basé sur tbl_curriculum.
Je veux vérifier quels sujets l'étudiant a prises et qui ne l'est pas, la requête doit retourner quelque chose comme ceci:
Subject_id|Grade|Status
23 | 2 |Passed
24 | 2 |Passed
31 | 2 |Passed
50 | 2 |Passed
83 | 1 |Passed
27 |NULL |NULL
28 |NULL |NULL
29 |NULL |NULL
.
.
.
Et Ainsi De Suite.
Subject_ID avec le Grade et le Statut signifie que l'étudiant a déjà pris le sujet. A l'inverse, les valeurs NULL indique que l'étudiant n'a pas pris ces sujets encore.
J'ai utilisé cette requête:
SELECT a.subject_id, b.grade, b.status
FROM tbl_curriculum a
LEFT JOIN tbl_enrolled_subjects b
ON a.course_id = b.course_id AND a.subject_id = b.subject_id
WHERE b.student_id_no='05-0531';
Mais je reçois seulement les sujets que l'étudiant a pris.
Subject_id|Grade|Status
23 | 2 |Passed
24 | 2 |Passed
31 | 2 |Passed
50 | 2 |Passed
83 | 1 |Passed
Suis-je raté quelque chose? Merci à l'avance.
Que dois-je faire ensuite?
OriginalL'auteur Ruben_PH | 2012-12-10
Vous devez vous connecter pour publier un commentaire.
La raison pour laquelle vous n'êtes pas à trouver toutes les valeurs null est parce que votre clause where est à la recherche pour les lignes avec un student_id_no rempli. Mais, avec les données que vous avez le student_id_no également être nulle dans le cas où l'étudiant n'a pas pris la classe...donc vous êtes en filtrant les.
Essayez ceci:
http://sqlfiddle.com/#!2/4c7b2/43
Depuis une jointure gauche implique le retour de tous les résultats de la table de gauche, je voudrais d'abord déterminer si simplement en les sélectionnant tous de tbl_curriculum souffre de lenteur. Si non, alors la seule autre véritables champs que nous utilisons sont student_id_no et les deux champs de nous rejoindre avec course_id et subject_id. Je voudrais essayer. En général, il est également une bonne idée de regarder le plan d'exécution de requête. dev.mysql.com/doc/refman/5.5/en/execution-plan-information.html
OriginalL'auteur purgatory101
Est très simple, vous utilisez
IS EMPTY
Dans votre entité, vous avez défini un inverse de la clé, puis vous appelez votre entité principale où inverse de la Clé EST VIDE.
Ensuite, j'ai un champ de curriculum défini comme
tbl_enrolled_subjects
dans letbl_curriculum
OriginalL'auteur Gabriel
essayer cette requête ::
OriginalL'auteur Ajith Sasidharan
Je crois, de mettre l'étudiant filtre dans le prédicat de JOINTURE donne également les résultats souhaités. Il travaille dans le SQL de Violon, mais je ne sais pas comment il affecte le plan de requête.
OriginalL'auteur davidp_1978