为什么反引号在UPDATE查询的SET部分中不起作用(对于MySQL)?

时间:2015-07-01 20:23:25

标签: mysql ruby-on-rails activerecord

以下SQL

UPDATE line_items SET `line_items.quantity` = 2 where line_items.id = 1234;

给了我这个错误:

ERROR 1054 (42S22): Unknown column 'line_items.quantity' in 'field list'

但是,这些查询都按预期工作:

UPDATE line_items SET line_items.quantity = 2 where line_items.id = 1234;
UPDATE line_items SET `quantity` = 2 where line_items.id = 1234;
UPDATE line_items SET quantity = 2 where line_items.id = 1234;

为什么反引号在这种特定情况下不起作用?

我当前的MySQL版本是Server version: 5.5.43-0ubuntu0.14.04.1 (Ubuntu)我上周安装的。我还没试过其他版本。

我问的原因是我有一个更复杂的UPDATE + JOIN查询,Ruby on Rails正在生成哪个不起作用,因为Rails添加了反引号。我试图弄清楚谁是错的:Rails,MySQL或我: - )

1 个答案:

答案 0 :(得分:4)

不要在表名和列名之间包含句点分隔符。执行此操作时,它会将整个事物视为列名。

你想要这个:

`line_items`.`quantity`

不是

`line_items.quantity`

最终查询应如下所示:

 UPDATE line_items SET `line_items`.`quantity` = 2 where line_items.id = 1234;