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;
|
Однако в качестве выражения он может использоваться в статьях:
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
.