MySQL案例是如何工作的?
我知道SQL的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中有一个字段,其中包含“经理”、“兼职”等名称,我如何根据角色生成一个编号不同的字段
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;