我正在尝试使用 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 标准