我知道SQL的CASE
语法如下:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
Run Code Online (Sandbox Code Playgroud)
但是,我不明白这是如何工作的,可能是因为我把它当作一个if
陈述.
user_role
例如,如果我在表中有一个字段,其中包含"Manager","Part Time"等名称,那么如何role_order
根据角色生成具有不同编号的字段.在此示例的情况下,"if user_role ='Manager',然后role_order = 5".
请注意我正在寻找一个教男人如何钓鱼回答而不是给男人一个鱼回答.
Red*_*ter 106
CASE
更像是一个switch语句.它有两种可以使用的语法.第一个允许您使用所需的任何比较语句:
CASE
WHEN user_role = 'Manager' then 4
WHEN user_name = 'Tom' then 27
WHEN columnA <> columnB then 99
ELSE -1 --unknown
END
Run Code Online (Sandbox Code Playgroud)
第二种方式是当你只检查一个值时,并且更简洁:
CASE user_role
WHEN 'Manager' then 4
WHEN 'Part Time' then 7
ELSE -1 --unknown
END
Run Code Online (Sandbox Code Playgroud)
Svi*_*vip 13
CASE
在MySQL中,它既是语句又是表达式,每种用法都略有不同.
作为一个语句,其CASE
工作方式与switch语句非常相似,在存储过程中非常有用,如本文中的示例所示(上面链接):
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;
|
Run Code Online (Sandbox Code Playgroud)
但是,作为表达式,它可以在子句中使用:
SELECT *
FROM employees
ORDER BY
CASE title
WHEN "President" THEN 1
WHEN "Manager" THEN 2
ELSE 3
END, surname
Run Code Online (Sandbox Code Playgroud)
另外,作为语句和表达式,第一个参数可以省略,每个参数都WHEN
必须采用一个条件.
SELECT *
FROM employees
ORDER BY
CASE
WHEN title = "President" THEN 1
WHEN title = "Manager" THEN 2
ELSE 3
END, surname
Run Code Online (Sandbox Code Playgroud)
我提供了这个答案,因为另一个答案没有提到CASE
它既可以作为语句也可以作为表达式.它们之间的主要区别在于语句形式结束,END CASE
表达形式以just结尾END
.