Есть два варианта CASE
, и вы не используете тот, который вам кажется.
Что вы делаете
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
Каждое условие в некоторой степени эквивалентно if (case_value == when_value)
(псевдокоду).
Однако вы задали целое условие как when_value
, что приведет к чему-то вроде:
if (case_value == (case_value > 100))
Теперь (case_value > 100)
оценивается как FALSE
и является единственным из ваших условий, чтобы сделать это.Итак, теперь у вас есть:
if (case_value == FALSE)
FALSE
преобразуется в 0
и, благодаря полученному полному выражению if (case_value == 0)
теперь вы можете увидеть, почему срабатывает третье условие.
Чтовы должны сделать
Отбросить первый course_enrollment_settings
, чтобы не было case_value
, в результате чего MySQL узнает, что вы собираетесь использовать второй вариант CASE
:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
Теперь вы можете предоставить полные условия в виде search_condition
.
Кроме того, ознакомьтесь с документацией по используемым функциям.