Quelle est la différence entre un Case Expression et un Case Statement dans MySQL? Quand peut-on les utiliser et quels sont les avantages de les utiliser les uns par rapport aux autres?
Syntaxe de la déclaration de cas:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
Syntaxe d'expression de cas:
CASE
WHEN [condition] THEN result
[WHEN [condition] THEN result ...]
[ELSE result]
END
Celles-ci semblent presque identiques, mais la description initiale des déclarations de cas est que The CASE statement for stored programs implements a complex conditional construct.
Est-ce que la différence significative est que l'un est utilisé dans les programmes stockés et n'est pas utilisable dans les requêtes normales? J'ai essayé cela sur une requête avec laquelle je jouais et cela a échoué - sqlfiddle . Si tel est le cas, pourquoi ne pas simplement utiliser l'expression de cas dans un programme stocké?
Y a-t-il d'autres différences syntaxiques à prendre en compte, car elles semblent identiques?
L'expression CASE
est évaluée en une valeur, c'est-à-dire qu'elle est utilisée pour évaluer l'un des résultats, en fonction d'une condition.
Exemple:
SELECT CASE
WHEN type = 1 THEN 'foo'
WHEN type = 2 THEN 'bar'
ELSE 'baz'
END AS name_for_numeric_type
FROM sometable`
L'instruction CASE
exécute l'une d'un ensemble d'instructions, en fonction d'une condition.
Exemple:
CASE
WHEN action = 'update' THEN
UPDATE sometable SET column = value WHERE condition;
WHEN action = 'create' THEN
INSERT INTO sometable (column) VALUES (value);
END CASE
Vous voyez comment ils sont similaires, mais l'instruction ne fait pas évalue à une valeur et peut être utilisée seule, tandis que l'expression doit faire partie d'une expression, par ex. une requête ou une affectation. Vous ne pouvez pas utiliser l'instruction dans une requête, car une requête ne peut pas contenir d'instructions, uniquement des expressions qui doivent être évaluées en quelque chose (la requête elle-même est en quelque sorte une instruction), par exemple SELECT CASE WHEN condition THEN UPDATE table SET something; END CASE
ça n'a aucun sens.