MySQL案例是如何工作的?

MySQL案例是如何工作的?,mysql,case,Mysql,Case,我知道SQL的CASE语法如下: CASE WHEN search_condition THEN statement_list [WHEN search_condition THEN statement_list] ... [ELSE statement_list] END CASE 然而,我不明白它是如何工作的,可能是因为我把它看作是一个if语句 例如,如果我在表user\u role中有一个字段,其中包含“经理”、“兼职”等名称,我如何根据角色生成一个编号不同的字段

我知道SQL的
CASE
语法如下:

CASE
    WHEN search_condition THEN statement_list
    [WHEN search_condition THEN statement_list] ...
    [ELSE statement_list]
END CASE
然而,我不明白它是如何工作的,可能是因为我把它看作是一个
if
语句

例如,如果我在表
user\u role
中有一个字段,其中包含“经理”、“兼职”等名称,我如何根据角色生成一个编号不同的字段
role\u order
。在本例中,“如果用户角色='Manager',则角色顺序=5”

请注意,我正在寻找一个教男人如何钓鱼的答案,而不是给男人鱼的答案。

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

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

MySQL中的
CASE
既是a又是an,两者的用法略有不同

作为一条语句,
CASE
的工作原理非常类似于switch语句,在存储过程中非常有用,如文档(链接到上面)中的示例所示:

但是,作为一个表达式,它可以在子句中使用:

SELECT *
  FROM employees
  ORDER BY
    CASE title
      WHEN "President" THEN 1
      WHEN "Manager" THEN 2
      ELSE 3
    END, surname
此外,作为语句和表达式,第一个参数都可以省略,并且每个
都必须满足一个条件

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

我提供这个答案是因为另一个答案没有提到
CASE
既可以作为语句也可以作为表达式。它们之间的主要区别在于,语句形式以
结束CASE
结尾,表达式形式以
结束
结尾。我想要一个简单的CASE用法示例,我可以使用它,它甚至不需要表格。这将返回奇数或偶数,具体取决于秒是奇数还是偶数

SELECT CASE MOD(SECOND(NOW()),2) WHEN 0 THEN 'odd' WHEN 1 THEN 'even' END;

您所说的有道理,我仍然不知道它在我尝试的查询的其余部分中的位置,您的代码作为角色从表中排序,但我不断得到错误。你能用一个完整的查询来展示一个例子吗?非常感谢。我明白了,你应该以“结束”而不是“结束案例”结束谢谢!对于那些没有阅读上述链接文档的人,您也可以不阅读此注释,但如果您阅读了:请注意,
案例
有两种不同的形式,语法非常相似,但目的/用途有所不同。。。另请参见。@AirThomas:实际上,根据MySQL文档,他所描述的是
大小写
表达式。而OP引用了
CASE
语句。@Svip绝对正确,我把它们颠倒过来了。抢手货(为了保持评论的干净性,阅读后加1,我也将删除。)
SELECT *
  FROM employees
  ORDER BY
    CASE 
      WHEN title = "President" THEN 1
      WHEN title = "Manager" THEN 2
      ELSE 3
    END, surname
SELECT CASE MOD(SECOND(NOW()),2) WHEN 0 THEN 'odd' WHEN 1 THEN 'even' END;