2013-03-04 5 views
3
UPDATE student as s 
LEFT JOIN takes as t 
    ON s.ID = t.ID 
LEFT JOIN course as c 
    ON t.course_id = c.course_id 
SET s.tot_cred = s.tot_cred - c.credits 
WHERE t.grade = 'F' OR t.grade IS NULL 

Je suis en train de mettre à jour tot_cred en étudiant en soustrayant la valeur du crédit d'une classe l'étudiant a échoué, année en prend relation = « F », ou prend actuellement, le grade en prend relation EST NUL.retour valeur null mysql

La requête ci-dessus définit cependant tot_cred sur NULL pour tous les étudiants qui répondent à ce critère et je ne peux pas comprendre pourquoi. Je m'excuse si cela a déjà été demandé, j'ai essayé de chercher quelque chose de pertinent, mais je n'ai pas trouvé beaucoup de problèmes liés à la soustraction. Je suis nouveau à stackoverflow. Merci à tous pour votre aide.

Répondre

2

ajouter COALESCE sur c.credits

set s.tot_cred = s.tot_cred - COALESCE(c.credits,0) 
+0

Il a travaillé pour des valeurs nulles et une note F, il y a 3 autres des occurrences nulles cependant. Je ne crois pas que ce soit la COALESCE qui cause ce problème. Je vais regarder ma requête et essayer de comprendre. Merci pour l'aide avec ce problème! –

1

Vous pouvez utiliser COALESCE comme réponse @JW ou utilisez IFNULL:

UPDATE student as s 
LEFT JOIN takes as t 
    ON s.ID = t.ID 
LEFT JOIN course as c 
    ON t.course_id = c.course_id 
SET s.tot_cred = s.tot_cred - IFNULL(c.credits, 0) 
WHERE t.grade = 'F' OR t.grade IS NULL