Как работает MySQL CASE?

mysql case

99571 просмотра

3 ответа

Я знаю, что CASEсинтаксис SQL выглядит следующим образом:

CASE
    WHEN search_condition THEN statement_list
    [WHEN search_condition THEN statement_list] ...
    [ELSE statement_list]
END CASE

Однако я не понимаю, как это работает, возможно, потому что я думаю об этом как об ifутверждении.

Если у меня есть поле в таблице user_role, например, которое содержит имена, такие как «Менеджер», «Неполный рабочий день» и т. Д., Как мне создать поле role_orderс другим номером в зависимости от роли. В этом примере «if user_role = 'Manager', тогда role_order = 5».

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

Автор: JD Isaacks Источник Размещён: 12.11.2019 09:16

Ответы (3)


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

Второй стиль для случая, когда вы изучаете только одно значение, и он более краткий:

CASE user_role
    WHEN 'Manager' then 4
    WHEN 'Part Time' then 7
    ELSE -1 --unknown
END
Автор: RedFilter Размещён: 02.08.2010 04:31

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;
  |

Однако в качестве выражения его можно использовать в предложениях:

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.

Автор: Svip Размещён: 02.01.2015 04:14

1 плюс

Я хотел простой пример использования кейса, с которым я мог бы играть, для этого даже не нужен стол. Это возвращает нечетное или четное в зависимости от того, является секунд нечетным или четным

SELECT CASE MOD(SECOND(NOW()),2) WHEN 0 THEN 'odd' WHEN 1 THEN 'even' END;
Автор: zzapper Размещён: 17.11.2016 03:33
Вопросы из категории :
32x32