• CASE语法

    CASE语法

    1. CASE case_value
    2. WHEN when_value THEN statement_list
    3. [WHEN when_value THEN statement_list] ...
    4. [ELSE statement_list]
    5. END CASE

    或者

    1. CASE
    2. WHEN search_condition THEN statement_list
    3. [WHEN search_condition THEN statement_list] ...
    4. [ELSE statement_list]
    5. END CASE

    对于存储程序,CASE语句实现了一个复杂的条件结构。

    对于第一个语法,case_value是一个表达式,这个值与when_value相比较,如果相等,则进入相应的statement_list,statement_list就是一个语句列表,可以包含多条语句。如果在when_value中没有和case_value相等的值,则进入ELSE里面的statement_list语句列表。

    对于第二个语法,每一个WHEN后面的search_condition表达式都会被判断,直到一个表达式的结果为真,然后执行相应的THEN后面的语句序列。如果没有匹配的,则执行ELSE后面的语句列表。

    如果when_value或search_condition都没有匹配到相应的值,并且没有写ELSE的时候,会出现a Case not found for CASE statement error results错误。

    每个statement_list应该包含一个或多个SQL语句,一个空的statement_list是不允许的。

    要处理这种没有匹配,也不想在ELSE里写任何SQL语句的时候,可以在ELSE里写一个空的BEGIN … END 块,如下所示:

    1. DELIMITER |
    2. CREATE PROCEDURE p()
    3. BEGIN
    4. DECLARE v INT DEFAULT 1;
    5. CASE v
    6. WHEN 2 THEN SELECT v;
    7. WHEN 3 THEN SELECT 0;
    8. ELSE
    9. BEGIN
    10. END;
    11. END CASE;
    12. END;
    13. |

    原文: https://strongyoung.gitbooks.io/mysql-reference-manual/content/sql_statement_syntax/mysql_compound_statement_syntax/flow_control_statement/case_syntax.html