使用多个值和 CONCAT 进行更新



我正在尝试使用 CONCAT 将多个值添加到数据库字段中。

涉及两个表:

products_description

+-----+------------+--------------------+
| id  |products_id | products_keywords  | 
+-----+------------+--------------------+-
| 123 | 1          |  something         | 
| 124 | 2          |  somethingelse     | 
+-----+------------+--------------------+-

products_spare

+-----+------------+--------------------+
| id  |spare_id    | products_name      | 
+-----+------------+--------------------+-
| 222 | 2          |  something to add  | 
| 223 | 2          |  something to add 2| 
+-----+------------+--------------------+-

我的更新查询如下所示:

UPDATE products_description pd
LEFT JOIN products_spare ps
ON pd.products_id = ps.spare_id
SET pd.products_keywords = CONCAT(pd.products_keywords," ",ps.products_name)
因此,"要添加的内容">

和"要添加的内容 2"都应该进入products_keywords字段中表格products_description的第二行。但只有一个人这样做。我想我在这里做错了什么。

UPDATE ... JOIN ...有多个匹配的行时,这是一个众所周知的问题;通常,只发生一次更新。

您可以通过使用group_concat()在子查询中预先聚合每个备件的产品名称,然后连接来解决此问题。

UPDATE products_description pd
INNER JOIN (
SELECT spare_id, GROUP_CONCAT(products_name separator ' ') products_names
FROM products_spare 
GROUP BY spare_id
) ps ON pd.products_id = ps.spare_id
SET pd.products_keywords = CONCAT(pd.products_keywords, ' ', ps.products_names)

旁注:

  • 您可能想要一个INNER JOIN而不是一个LEFT JOIN(当没有匹配的记录时,没有要更新的内容(

  • 对字符串使用单引号而不是双引号:这是 SQL 标准

最新更新