У меня странное поведение 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.
Я действительно понятия не имею, что вызывает эту ошибку, любая помощь очень ценится!
Это потому что MySql
обрабатывает это 125X
как имя столбца, так как он не анализируется как строка.
Пример для field1
поиск:
WHEN 125X THEN 'PHP'
должны быть заключены в кавычки, как вы делаете для field2
:
WHEN '125X' THEN 'PHP'
поэтому двигатель знает, что вы пытаетесь сравнить string
125X
к колонне varchar.
Поместите это в single quete
как 125x это строка не число ,иначе MySQL будет рассматривать его как число
или как имя столбца (если оно не похоже на число)
WHEN '125X' THEN 'PHP'
Вы должны поместить строки в кавычки. Когда значение не заключено в кавычки, оно обрабатывается как число, если оно выглядит как число, в противном случае оно обрабатывается как имя столбца (или вы получаете синтаксическую ошибку, если это недопустимый синтаксис для имени столбца). Так что ваши CASE
заявление для field1
должен быть как тот для field2
со всеми WHEN
значения в кавычках.
WHEN '125X' THEN 'PHP'
Или же:
WHEN "125X" THEN 'PHP'
Как вы сделали для:
WHEN '125X' THEN 'Linux'
От Функции управления потоком:
Возвращаемый тип выражения CASE — это совместимый агрегированный тип.
всех возвращаемых значений, но также зависит от контекста, в котором он
используемый. Если используется в строковом контексте, результат возвращается в виде строки.
Если используется в числовом контексте, результат возвращается как десятичное число,
действительное или целочисленное значение.