UPDATE crm_accounts
SET
reg = "Sim"
WHERE age >= 17
AND age <= 35
AND balance > 0.00
AND type = "Júnior";
UPDATE crm_accounts
SET
reg = "Não"
WHERE age >= 17
AND age <= 35
AND balance = 0.00
AND type = "Júnior";
UPDATE crm_accounts
SET
type = "Efetivo"
WHERE age >= 17
AND age <= 35
AND type = "Júnior";
该声明适用于此目的,但我希望在案例陈述中简化和组合。有帮助吗?感谢。
答案 0 :(得分:2)
看起来你想要这样的东西:
UPDATE crm_accounts a
SET a.reg
= CASE
WHEN a.balance > 0.00 THEN 'Sim'
WHEN a.balance = 0.00 THEN 'Não'
ELSE a.reg
END
, a.type = 'Efetivo'
WHERE a.age >= 17
AND a.age <= 35
AND a.type = 'Júnior'
每当我写这样的更新语句时,我总是首先在SELECT语句中测试表达式和谓词,并验证结果。在将其转换为UPDATE语句之前,我确保一切都按照我需要的方式工作。
SELECT a.age >= 17
, a.type
, a.reg AS old_reg
, CASE
WHEN a.balance > 0.00 THEN 'Sim'
WHEN a.balance = 0.00 THEN 'Não'
ELSE a.reg
END AS new_reg
FROM crm_accounts a
WHERE a.age >= 17
AND a.age <= 35
AND a.type = 'Júnior'
答案 1 :(得分:0)
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表达式都会被计算,直到有一个为真,此时它的相应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