使用多个值和 CONCAT 进行更新

UPDATE with multiple values and CONCAT

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

涉及两个table:

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)

所以 "something to add" 和 "something to add 2" 都应该进入 products_keywords 字段中 table 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 标准