我正在尝试使用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表的第二行。但是只有一个。我想我在这里做错了。
[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)