具有多个值和CONCAT的更新

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

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

涉及两个表:

产品说明

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

产品备用

+-----+------------+--------------------+
| 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表的第二行。但是只有一个。我想我在这里做错了。

mysql sql-update concat
1个回答
0
投票

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

您可以通过使用group_concat()在子查询中预先汇总每个备用产品的产品名称,然后加入来解决此问题。

旁注:您可能想要INNER JOIN而不是LEFT JOIN

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)
© www.soinside.com 2019 - 2024. All rights reserved.