mysql - 如何在 MySQL 中使用更新语句,同时使用两个内联接并将表设置为串联?

标签 mysql inner-join concatenation group-concat

我正在尝试将product.keywords设置为等于我的category.name

我有多个类别的产品。我想将每个类别名称连接到product.keyword

示例:

SKU123 产品 ID 位于类别 ID 1,2 和 3 中。类别名称分别为类别 1、类别 2 和类别 3。

Sku123的product.keyword当前为“Awesome”

我想编写一个更新脚本来更新我的所有产品.关键字

...

SKU123 的 Product.keyword 应该 = Awesome、类别 1、类别 2 和类别 3

...

是的,请用逗号分隔:)

我有三张 table 。

名为“产品”的表:

  1. 名为“id”的列

名为“category_product”的表:

  1. 名为“product_id”的列
  2. 名为“category_id”的列

名为“类别”的表:

  1. 名为“name”的列
  2. 名为“id”的列

产品.id = 产品 ID

category_product.product_id = 产品 ID

category_product.category_id = 类别 ID

category.name = 类别名称

category.id = 类别 ID

    select p.sku,p.name,p.keywords,c.name,c.id,group_concat(concat(p.keywords,',',c.name)) as new_keywords

    from category_product cp inner join category c on cp.category_id = c.id

inner join product p on p.id=cp.product_id

    where p.keywords >'' and p.sku='CJP-250-TMG10-1874470677';

上面应该让您了解一切是如何连接的。

抱歉,这只是我第二次使用该网站。希望你们有足够的信息!

最佳答案

您的JOIN本质上是正确的。您需要在 GROUP_CONCAT(c.name) 之外执行 CONCAT(p.keywords),否则您将在每个类别名称中重复原始关键字。要对每个产品执行此操作,请从 WHERE 子句中删除 p.sku 并使用 GROUP BY p.sku

UPDATE products AS p
JOIN (
    SELECT p.sku, CONCAT(p.keywords, ',', GROUP_CONCAT(c.name)) AS new_keywords
    FROM products AS p
    JOIN category_product AS cp ON p.id = cp.product_id
    JOIN category AS c ON cp.category_id = c.id
    WHERE p.keywords != ''
    GROUP BY p.sku) AS p1 ON p.sku = p1.sku
SET p.keywords = p1.new_keywords

显示它将存储的内容的 SELECT 语句是:

SELECT p.sku, p.name, p.keywords, CONCAT(p.keywords, ',', GROUP_CONCAT(c.name)) AS new_keywords
FROM products AS p
JOIN category_product AS cp ON p.id = cp.product_id
JOIN category AS c ON cp.category_id = c.id
WHERE p.keywords != ''
GROUP BY p.sku

关于mysql - 如何在 MySQL 中使用更新语句,同时使用两个内联接并将表设置为串联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45092819/

相关文章:

php - 我应该在哪里进行计算,PHP 还是 Mysql?

mysql - 多表Mysql JOIN

mysql - INNER JOIN 表自身

c++ - 在 C++ 中连接 C 字符串的更优雅的方法?

string - 如何在不复制的情况下将两个字符串连接成第三个字符串?

mysql - FullCalendar jquery json 事件 MySQL 问题

MySQL 连接,其中一个值可以是可选的

MYSQL 计算 YTD

mysql - 如何使用两个内部联接修改此查询,以使其停止提供重复结果?

excel - 与文本和标点符号动态范围连接