一尘不染

案例表达与案例陈述

mysql

MySQL中的Case表达式Case语句有什么区别?什么时候可以使用它们?与另一种相比,使用它们有什么好处?

Case Statement语法:

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

案例表达语法:

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

这些看起来几乎相同,但是对Case Statements的最初描述是: The CASE statement for stored programs implements a complex conditional construct.

那么,在存储程序中使用一个而不在普通查询中使用它的显着区别是吗?我在正在使用的查询中尝试了此操作,但失败了-sqlfiddle。如果是这种情况,为什么不只在存储程序中使用Case
Expression?

还有其他语法上的差异,因为它们似乎是相同的?


阅读 399

收藏
2020-05-17

共1个答案

一尘不染

CASE表达式根据某个条件求值,即用于对一组结果之一求值。
例:

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

您将看到它们的相似之处,但是该语句 不会
求值,并且可以单独使用,而表达式需要成为表达式的一部分,例如查询或赋值。您不能在查询中使用该语句,因为查询不能包含语句,因此仅需要对某些内容求值的表达式(从SELECT CASE WHEN condition THEN UPDATE table SET something; END CASE某种意义上说,查询本身就是一条语句),例如,没有任何意义。

2020-05-17