我有一个使用CASE子句
的MySQL UPDATE语句UPDATE partsList SET quantity =
CASE
WHEN partFK = 1 THEN 4
WHEN partFK = 2 THEN 8
END
WHERE buildFK = 1;
以上陈述有效。然而,当我删除其中一个WHEN语句时,它会中断并且错误表明CASE子句没有返回任何内容。是CASE子句必须有多个WHEN才能运行。
我事先不知道我需要多少更新,所以我正在尝试构建一个可以处理一个或多个更新的更新语句。
感谢您提供的任何见解。
答案 0 :(得分:27)
并不是CASE
必须有多个WHEN...THEN
,而是它必须处理您提供的所有日期。
如果您删除了其中一个条款,则会留下一个漏洞。 e.g。
UPDATE partsList SET quantity =
CASE
WHEN partFK = 1 THEN 4
END
WHERE buildFK = 1;
使用此更新语句,如果parkFK
为2,则更新失败,因为CASE无法处理输入。
您可以通过在where子句中添加另一行来限制源数据(例如AND partFK in (1,2)
),也可以在案例表达式中添加ELSE
。
UPDATE partsList SET quantity =
CASE
WHEN partFK = 1 THEN 4
WHEN partFK = 2 THEN 8
ELSE 12
END
WHERE buildFK = 1;
但是,根据您显示的SQL语句,可能有更好的方法。据推测,partFK是其他表的外键。你能从那里提取quantity
的价值吗?
答案 1 :(得分:1)
在案例ELSE NULL
之前添加END
或其他内容。有关详细信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/case-statement.html。