Подтвердить что ты не робот

Выражение случая против случая

В чем разница между Case Expression и Case Statement в MySQL? Когда они могут использоваться и каковы преимущества использования одного над другим?

Синтаксис случая:

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

Синтаксис выражения выражения:

CASE 
  WHEN [condition] THEN result 
  [WHEN [condition] THEN result ...] 
  [ELSE result] 
END

Они выглядят почти идентичными, но исходное описание для операторов Case состоит в том, что The CASE statement for stored programs implements a complex conditional construct.

Значит, значительная разница в том, что один используется в хранимых программах и не используется в обычных запросах? Я пробовал это по запросу, с которым я играл, и это не удалось - sqlfiddle. Если это так, почему бы не просто использовать выражение Expression в сохраненной программе?

Есть ли другие синтаксические различия, о которых нужно знать, поскольку они кажутся идентичными?

4b9b3361

Ответ 1

Выражение CASE оценивается значением, то есть оно используется для оценки одного из набора результатов на основе некоторого условия.
Пример:

SELECT CASE
    WHEN type = 1 THEN 'foo'
    WHEN type = 2 THEN 'bar'
    ELSE 'baz'
END AS name_for_numeric_type
FROM sometable`

Оператор CASE выполняет один из множества операторов, основанный на некотором условии.
Пример:

CASE
    WHEN action = 'update' THEN
        UPDATE sometable SET column = value WHERE condition;
    WHEN action = 'create' THEN
        INSERT INTO sometable (column) VALUES (value);
END CASE

Вы видите, как они похожи, но оператор не оценивает значение и может использоваться сам по себе, в то время как выражение должно быть частью выражения, например. запрос или задание. Вы не можете использовать оператор в запросе, так как запрос не может содержать операторов, а только выражения, которые должны оценивать что-либо (сам запрос является выражением в некотором смысле), например. SELECT CASE WHEN condition THEN UPDATE table SET something; END CASE не имеет смысла.