CASE
在發言MYSQL
有兩種語法CASE語句
SYNTAX 1:
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
SYNTAX 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語句錯誤結果的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
你試過了什麼?一些閱讀:http://stackoverflow.com/a/15745186/180100 – 2016-09-30 16:34:04