案例expression与案例陈述

MySQL中的Caseexpression式与Case语句之间有什么区别? 他们什么时候可以使用,以及使用其中一个的好处是什么?

案例语句语法:

CASE WHEN search_condition THEN statement_list [WHEN search_condition THEN statement_list] ... [ELSE statement_list] END CASE 

案例expression式语法:

 CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END 

这些看起来几乎完全相同,但Case语句的初始描述是The CASE statement for stored programs implements a complex conditional construct.

那么,在存储的程序中使用哪一个显着的区别,在正常的查询中是不可用的呢? 我尝试了一个查询,我正在玩,失败 – sqlfiddle 。 如果是这种情况,为什么不直接在stored procedures中使用Case Expression?

还有什么其他的语法差异要注意,因为它们看起来是一样的吗?

CASEexpression式评估为一个值,也就是说,它被用来根据一些条件来评估一组结果中的一个。
例:

 SELECT CASE WHEN type = 1 THEN 'foo' WHEN type = 2 THEN 'bar' ELSE 'baz' END AS name_for_numeric_type FROM sometable` 

CASE语句根据某些条件执行一组语句之一。
例:

 CASE WHEN action = 'update' THEN UPDATE sometable SET column = value WHERE condition; WHEN action = 'create' THEN INSERT INTO sometable (column) VALUES (value); END CASE 

你会看到它们是如何相似的,但是这个语句并不是一个值,而是可以单独使用,而expression式则需要成为expression式的一部分,例如查询或赋值。 你不能在查询中使用这个语句,因为查询不能包含语句,只有需要求值的expression式(查询本身就是一个语句),例如SELECT CASE WHEN condition THEN UPDATE table SET something; END CASE SELECT CASE WHEN condition THEN UPDATE table SET something; END CASE是没有意义的。