Estás usando mal el case
expresión. Hay dos formas. El formulario que desea es:
(CASE WHEN userName IS NULL THEN 'was null'
WHEN userName IS NOT NULL THEN 'was not null'
END) AS caseExpressionTest
Nota:No hay userName
después del CASE
.
Esto verifica cada condición deteniéndose en la primera.
MySQL interpreta los valores booleanos como un valor válido. Entonces su versión es:
-- when userName is NULL
(CASE userName
WHEN 0 THEN 'was null'
WHEN 1 THEN 'was not null'
END AS caseExpressionTest
Esto devolverá NULL
.
O:
-- when userName is not NULL
(CASE userName
WHEN 1 THEN 'was null'
WHEN 0 THEN 'was not null'
END AS caseExpressionTest
Presumiblemente, userName
es una cadena. Esto convertirá userName
a un número entero basado en los primeros dígitos. Si no hay dígitos iniciales, obtienes 0
, por lo que hay una coincidencia.