Вы смешиваете два способа использования CASE
. Вы либо пишете:
CASE
WHEN <expression1> THEN <result1>;
WHEN <expression2> THEN <result2>;
...
END CASE
Это оценивает каждое выражение и выполняет соответствующий результат для первого истинного. Или:
CASE <expression>
WHEN <val1> THEN <result1>;
WHEN <val2> THEN <result2>;
...
END CASE
Это сравнивает <expression>
с каждым значением и выполняет соответствующий результат для первого, который соответствует.
Вы использовали второй синтаксис, но ваши значения также содержат сравнение. Таким образом, они все либо 0
(для false
), либо 1
(для true
), и именно это вы сравниваете modTemp
. Изменить на:
CASE modTemp
WHEN 1 THEN
SELECT 1;
WHEN 2 THEN
SELECT 2;
WHEN 0 THEN
SELECT 3;
ELSE
SELECT CONCAT('Error: modTemp = ', modTemp);
END CASE;