Използвате неправилно case
изразяване. Има две форми. Формата, която искате е:
(CASE WHEN userName IS NULL THEN 'was null'
WHEN userName IS NOT NULL THEN 'was not null'
END) AS caseExpressionTest
Забележка:Няма userName
след CASE
.
Това проверява всяко условие, спирайки на първото.
MySQL интерпретира булевите стойности като валидна стойност. Така че вашата версия е:
-- when userName is NULL
(CASE userName
WHEN 0 THEN 'was null'
WHEN 1 THEN 'was not null'
END AS caseExpressionTest
Това ще върне NULL
.
Или:
-- when userName is not NULL
(CASE userName
WHEN 1 THEN 'was null'
WHEN 0 THEN 'was not null'
END AS caseExpressionTest
Предполага се, userName
е низ. Това ще преобразува userName
до цяло число въз основа на водещи цифри. Ако няма водещи цифри, получавате 0
, поради което има съвпадение.