减法返回null值mysql

时间:2013-03-04 06:23:42

标签: mysql sql sql-update

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

我正在尝试通过减去学生失败的任何课程的学分值来更新学生中的tot_cred,成绩为关系='F',或正在服用,考试成绩等级为IS NULL。

但是,对于符合此条件的学生而言,上面的查询将tot_cred设置为NULL,我无法弄清楚原因。

我很抱歉,如果之前已经提出这个问题,我会尝试搜索相关的内容,但却找不到与减法相关的许多问题。我是stackoverflow的新手。谢谢大家的帮助。

2 个答案:

答案 0 :(得分:3)

COALESCE

上添加c.credits
set s.tot_cred = s.tot_cred - COALESCE(c.credits,0)

答案 1 :(得分:1)

您可以像@JW一样使用COALESCE ,或使用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