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