2014-10-25 4 views
-2

У меня странное поведение MySQL. Я обновляю mutliple строк сразу с запросами, как это:MySQL - Неизвестный столбец '125X' в 'where clause', weird error

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 125X» дает мне эту ошибку:

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

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

ответ

2

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

WHEN '125X' THEN 'PHP' 
1

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

2

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

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

WHEN 125X THEN 'PHP' 

должен быть обернут в кавычках, как вы делаете для field2:

WHEN '125X' THEN 'PHP' 

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

0
WHEN '125X' THEN 'PHP' 

Или:

WHEN "125X" THEN 'PHP' 

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

WHEN '125X' THEN 'Linux' 

От control flow functions:

The return type of a CASE expression is the compatible aggregated type of all return values, but also depends on the context in which it is used. If used in a string context, the result is returned as a string. If used in a numeric context, the result is returned as a decimal, real, or integer value.

Смежные вопросы