Как работает случай 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".



Пожалуйста, обратите внимание, что я ищу научи человека ловить рыбу ответ, а не дайте человеку рыбу ответ.

430   3  

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

    Ничего не найдено.