没有提供所有字段的MySQL REPLACE

问题描述 投票:0回答:2

我有mysql查询来替换一些记录:

REPLACE INTO product_core
(id, title, description, category_id)
VALUES (2, 'new_title', 'new_description', 33)

我可以这样做,但不提供所有需要的值吗?示例:

REPLACE INTO product_core
(id, title, description, category_id)
VALUES (2, 'new_title', 'new_description') #no category_id

Got error wrong number of values here near

我想批量替换许多记录,但是我不想之前查询所有字段。在此示例中,我想为某些记录而不是所有记录更新category_id。

REPLACE INTO product_core
(id, title, description, category_id)
VALUES (2, 'new_title_2', 'new_description_2'), #no category_id
(3, 'new_title_3', 'new_description_3', 34) #with category_id

这样做是真的吗?在一个查询中,将一些字段替换为一条记录,将其他字段替换为第二条记录。

或者提供特殊变量的含义是否真的是真的,意味着某些字段与替换前的字段相同(category_id)?

VALUES (2, 'new_title_2', 'new_description_2', @category_id_same_as_before)
mysql ruby-on-rails ruby database sphinx
2个回答
0
投票

除非它是该列的默认值,否则您无法从REPLACE命令中省略这些列。

根据the documentation

任何缺少的列均设置为其默认值。 [...]您不能引用当前行中的值,也不能在新行中使用它们。

最好改用标准的UPDATE命令,该命令可以引用当前列的值。


0
投票

我可以这样做,但不提供所有需要的值吗?示例:

REPLACE INTO product_core(标识,标题,描述,类别ID)VALUES (2,'new_title','new_description')#no category_id

是,正确的查询是:

REPLACE INTO product_core
(id, title, description)
VALUES (2, 'new_title', 'new_description') #no category_id

这样做是真的吗?在一个查询中,将某些字段替换为一条记录,将其他字段替换为第二条记录。

在MySQL中是不可能的。列列表对于所有值集都是通用的。

或者提供某些字段的特殊变量含义是否真实 是否与替换前相同(category_id)?

也许是可行的,但并非一帆风顺,并非在所有MySQL版本中。他们在docs中说:“您不能引用当前行中的值,也不能在新行中使用它们”。在MySQL> 8.0.19中,VALUES(ROW)可能会有所帮助。或者,您也可以编写自己的UDF来做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.