我有一个奇怪的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类型。 我真的不知道导致这个错误的原因,非常感谢任何帮助!
答案 0 :(得分:2)
将其放在single quete
125x的字符串而不是数字,否则mysql会将其视为数字
或作为列名(如果它看起来不像数字)
WHEN '125X' THEN 'PHP'
答案 1 :(得分:2)
那是因为MySql
将125X
作为列名处理,因为它没有被解析为字符串。
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'
CASE表达式的返回类型是兼容的聚合类型 所有返回值,但也取决于它的上下文 用过的。如果在字符串上下文中使用,则结果将作为字符串返回。 如果在数字上下文中使用,则结果以十进制形式返回, 实数或整数值。