MySQL - 未知专栏' 125X'在' where子句',奇怪的错误

时间:2014-10-25 10:25:04

标签: php mysql mysql-error-1054

我有一个奇怪的MySQL行为。我正在使用这样的查询一次更新mutliple行:

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类型。 我真的不知道导致这个错误的原因,非常感谢任何帮助!

4 个答案:

答案 0 :(得分:2)

将其放在single quete 125x的字符串而不是数字,否则mysql会将其视为数字 或作为列名(如果它看起来不像数字)

WHEN '125X' THEN 'PHP'

答案 1 :(得分:2)

那是因为MySql125X作为列名处理,因为它没有被解析为字符串。

field1搜索的示例:

WHEN 125X THEN 'PHP'

应该像field2一样用引号括起来:

WHEN '125X' THEN 'PHP'

因此引擎知道您正在尝试将string 125X与varchar列进行比较。

答案 2 :(得分:1)

您需要将字符串放在引号中。如果未引用某个值,则将其视为数字(如果它看起来像数字),否则将其视为列名称(如果它不是列名称的有效语法,则会出现语法错误)。因此,CASE的{​​{1}}语句应与field1的语句类似,并引用所有field2值。

答案 3 :(得分:0)

WHEN '125X' THEN 'PHP'

或者:

WHEN "125X" THEN 'PHP'

正如你所做的那样:

WHEN '125X' THEN 'Linux'

来自control flow functions:

  

CASE表达式的返回类型是兼容的聚合类型   所有返回值,但也取决于它的上下文   用过的。如果在字符串上下文中使用,则结果将作为字符串返回。   如果在数字上下文中使用,则结果以十进制形式返回,   实数或整数值。