MySQL — неизвестный столбец ‘125X’ в ‘предложении where’, странная ошибка

У меня странное поведение MySQL. Я обновляю несколько строк сразу с помощью следующих запросов:

UPDATE tableName
SET field1= CASE numbertofind
WHEN 1234 THEN 'voltron'
WHEN 1598 THEN 'optimus Prime'
WHEN 4444 THEN 'redbonzai'
WHEN 125X THEN 'PHP'
END,
field2= CASE numbertofind
WHEN '1234' THEN 'Bozo'
WHEN '1598' THEN 'transformer'
WHEN '4444' THEN 'Teddy Bear'
WHEN '125X' THEN 'Linux'
END
WHERE fieldValue2 IN ('1234', '1598', '4444', '125X');

Все работает нормально, пока у меня есть только числа в предложении WHEN. Например, «WHEN 125X» дает мне эту ошибку:

#1054 - Unknown column '125X' in 'where clauses'

Столбец существует, конечно. Поле «numbertofind» в моей базе данных имеет тип varchar.
Я действительно понятия не имею, что вызывает эту ошибку, любая помощь очень ценится!

-2

Решение

Это потому что MySql обрабатывает это 125X как имя столбца, так как он не анализируется как строка.

Пример для field1 поиск:

WHEN 125X THEN 'PHP'

должны быть заключены в кавычки, как вы делаете для field2:

WHEN '125X' THEN 'PHP'

поэтому двигатель знает, что вы пытаетесь сравнить string 125X к колонне varchar.

2

Другие решения

Поместите это в single quete как 125x это строка не число ,иначе MySQL будет рассматривать его как число
или как имя столбца (если оно не похоже на число)

WHEN '125X' THEN 'PHP'
2

Вы должны поместить строки в кавычки. Когда значение не заключено в кавычки, оно обрабатывается как число, если оно выглядит как число, в противном случае оно обрабатывается как имя столбца (или вы получаете синтаксическую ошибку, если это недопустимый синтаксис для имени столбца). Так что ваши CASE заявление для field1 должен быть как тот для field2со всеми WHEN значения в кавычках.

1

WHEN '125X' THEN 'PHP'

Или же:

WHEN "125X" THEN 'PHP'

Как вы сделали для:

WHEN '125X' THEN 'Linux'

От Функции управления потоком:

Возвращаемый тип выражения CASE — это совместимый агрегированный тип.
всех возвращаемых значений, но также зависит от контекста, в котором он
используемый. Если используется в строковом контексте, результат возвращается в виде строки.
Если используется в числовом контексте, результат возвращается как десятичное число,
действительное или целочисленное значение.

0
По вопросам рекламы [email protected]