使用Case语句更新表

时间:2016-09-30 16:29:42

标签: mysql sql case

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";

该声明适用于此目的,但我希望在案例陈述中简化和组合。有帮助吗?感谢。

2 个答案:

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

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表达式都会被计算,直到有一个为真,此时它的相应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