MySQL CASE ... WHERE ...那么陈述

时间:2011-12-01 20:45:51

标签: mysql sql-update

我有一个使用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才能运行。

我事先不知道我需要多少更新,所以我正在尝试构建一个可以处理一个或多个更新的更新语句。

感谢您提供的任何见解。

2 个答案:

答案 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