Ваш код эквивалентен этому:
SET @ip_AllocationId = 1;
SET @ip_status = NULL;
SET @inv_status = 4;
SELECT @inv_status = (
CASE
WHEN @ip_AllocationId = 1 AND @ip_status IS NULL THEN CONCAT('1',',','4')
WHEN @ip_AllocationId = 1 AND @ip_status=1 THEN 1
WHEN @ip_AllocationId = 1 AND @ip_status=2 THEN 4
END
) AS success;
То, что вы делаете, сравнивает @inv_status
со строкой '1,4'
, потому что логическое выражение @ip_AllocationId = 1 AND @ip_status IS NULL
1-й ветви CASE
выражение - TRUE
. Результат: FALSE
, и вы получите 0
. Я подозреваю, что вам нужно что-то вроде этого:
SET @ip_AllocationId = 1;
SET @ip_status = NULL;
SET @inv_status = 4;
SELECT FIND_IN_SET(@inv_status,
CASE
WHEN @ip_AllocationId = 1 AND @ip_status IS NULL THEN CONCAT('1',',','4')
WHEN @ip_AllocationId = 1 AND @ip_status=1 THEN '1'
WHEN @ip_AllocationId = 1 AND @ip_status=2 THEN '4'
END
) > 0 AS success;
Таким образом вы проверяете наличие @inv_status
в списке значений, разделенных запятыми, вместо прямого сравнения. См. Демонстрацию .