MYSQL
中的CASE
语句
CASE
语句有两种语法形式
语法形式1:
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
语法 2:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
语法一的解释:
对于第一种语法,case_value 是一个表达式。将该值与每个 WHEN 子句中的 when_value 表达式进行比较,直到找到相等的为止。当找到相等的 when_value 时,执行相应的 THEN 子句 statement_list。如果没有相等的 when_value,则执行 ELSE 子句 statement_list(如果有)。
此语法不能用于测试与 NULL 的相等性,因为 NULL = NULL 是 false。
语法二的解释:
对于第二种语法,将评估每个 WHEN 子句 search_condition 表达式,直到其中一个为 true,此时将执行其相应的 THEN 子句 statement_list。如果没有匹配的 search_condition,则执行 ELSE 子句 statement_list(如果有)。
如果没有 when_value 或 search_condition 与测试的值匹配,并且 CASE 语句不包含 ELSE 子句,则会导致“CASE 语句未找到”错误。
每个 statement_list 包含一个或多个 SQL 语句;不允许为空的 statement_list。
要处理任何 WHEN 子句都没有匹配的情况,请使用包含空 BEGIN ... END 块的 ELSE,如本示例所示。(此处在 ELSE 子句中使用的缩进仅用于清晰起见,否则没有其他意义。)
DELIMITER |
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
END;
END CASE;
END;
|
您可以使用 CASE 语句更新您的代码,就像这样...
UPDATE `crm_accounts` SET `reg` = CASE
WHEN age >= 17
AND age <= 35
AND balance > 0.00
AND type = "Júnior" THEN "Sim"
WHEN age >= 17
AND age <= 35
AND balance = 0.00
AND type = "Júnior" THEN "Não"
WHEN age >= 17
AND age <= 35
AND type = "Júnior" THEN "Efetivo"
ELSE `reg`
END