Как работает случай MySQL?
Я знаю, что SQL-это CASE синтаксис:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
однако я не понимаю, как это работает, возможно, потому, что я думаю об этом как о if заявление.
если у меня есть поле в таблице user_role, например, которая содержит имена, как "менеджер", "полставки" и т. д. как мне создать поле role_order С другим номером в зависимости от роли. В случае этого примера, "если user_role = 'Manager' то role_order = 5".
Пожалуйста, обратите внимание, что я ищу научи человека ловить рыбу ответ, а не дайте человеку рыбу ответ.
3 ответов:
CASEбольше похоже на оператор switch. Он имеет два синтаксиса, которые вы можете использовать. Первый позволяет использовать любые операторы сравнения, которые вы хотите: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работает так же, как оператор 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.
Мне нужен простой пример использования case, с которым я мог бы играть, для этого даже не нужна таблица. Это возвращает нечетное или четное в зависимости от того, являются ли секунды нечетными или четными
SELECT CASE MOD(SECOND(NOW()),2) WHEN 0 THEN 'odd' WHEN 1 THEN 'even' END;
Comments