4
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',或当前正在学习,成绩关系为空。

然而,上面的查询将任何符合此条件的学生的 tot_cred 设置为 NULL,我不知道为什么。

如果之前有人问过这个问题,我深表歉意,我试图搜索相关的内容,但找不到与减法相关的许多问题。我是stackoverflow的新手。谢谢大家的帮助。

4

2 回答 2

4

您可以像@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
于 2013-03-04T06:34:12.263 回答
4

添加COALESCE_c.credits

set s.tot_cred = s.tot_cred - COALESCE(c.credits,0)
于 2013-03-04T06:25:34.383 回答