gpt4 book ai didi

mysql - 使用多个值更新和 CONCAT

转载 作者:行者123 更新时间:2023-11-29 09:24:45 26 4
gpt4 key购买 nike

我正在尝试使用 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_description 表的第二行 products_keywords 字段中。但只有一个人这样做。我想我在这里做了一些愚蠢的错误。

最佳答案

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 标准

关于mysql - 使用多个值更新和 CONCAT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59787966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com