MySQL案例是如何工作的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

我知道SQL的CASE语法如下:

CASE
    WHEN search_condition THEN statement_list
    [WHEN search_condition THEN statement_list] ...
    [ELSE statement_list]
END CASE

不过,我不明白这是怎么回事,可能是因为我认为if声明。

如果我在桌子上有一个字段user_role,例如,其中包含“Manager”、“兼职”等名称,如何生成字段role_order根据角色的不同使用不同的数字。在本例中,“如果用户_角色=“经理”然后角色_命令=5“。

提问于
用户回答回答于

CASE更像是开关语句。它有两个可以使用的语法。第一种方法允许你使用所需的任何比较语句:

CASE 
    WHEN user_role = 'Manager' then 4
    WHEN user_name = 'Tom' then 27
    WHEN columnA <> columnB then 99
    ELSE -1 --unknown
END

第二种样式是在你只检查一个值时使用的,并且比较简洁:

CASE user_role
    WHEN 'Manager' then 4
    WHEN 'Part Time' then 7
    ELSE -1 --unknown
END
用户回答回答于

CASE在MySQL中,两者都是陈述和一个表达,每种用法略有不同。

作为声明,CASE它的工作原理非常类似于开关语句,并且在存储过程中很有用,如本例所示(上面链接的文档):

DELIMITER |

CREATE PROCEDURE p()
  BEGIN
    DECLARE v INT DEFAULT 1;

    CASE v
      WHEN 2 THEN SELECT v;
      WHEN 3 THEN SELECT 0;
      ELSE
        BEGIN -- Do other stuff
        END;
    END CASE;
  END;
  |

然而,作为一种表达方式,它可以用于从句中:

SELECT *
  FROM employees
  ORDER BY
    CASE title
      WHEN "President" THEN 1
      WHEN "Manager" THEN 2
      ELSE 3
    END, surname

此外,作为语句和表达式,第一个参数可以省略,并且每个参数都可以省略。WHEN一定要有条件。

SELECT *
  FROM employees
  ORDER BY
    CASE 
      WHEN title = "President" THEN 1
      WHEN title = "Manager" THEN 2
      ELSE 3
    END, surname

我提供这个答案是因为另一个答案没有提到CASE既可以作为语句,也可以用作表达式。它们之间的主要区别在于语句形式以END CASE表达式表单以END...

扫码关注云+社区