如何在使用两个内部联接并将 table 设置为串联时使用带有 MySQL 的更新语句?
How to use an update statement with MySQL while using two inner joins and setting a table to a concatenation?
我正在尝试将 product.keywords 设置为等于我的 category.name(s)
我有多个类别的产品。我想将每个类别名称连接到 product.keyword
示例:
SKU123 product.id在category.id1,2,3。category.name分别为1类,2类,3类。
Sku123 的 product.keyword 目前是 "Awesome"
我想编写一个更新脚本来更新我所有的 product.keyword
...
SKU123 的 product.keyword 应该 = Awesome,类别 1、类别 2 和类别 3
...
是的,请用逗号分隔:)
我有三个table。
table 名为 "Product":
- 列名为 "id"
Table 名为 "category_product":
- 列名为 "product_id"
- 名为 "category_id"
的列
Table 名为 "category":
- 列名为 "name"
- 列名为 "id"
product.id = 产品编号
category_product.product_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
我正在尝试将 product.keywords 设置为等于我的 category.name(s)
我有多个类别的产品。我想将每个类别名称连接到 product.keyword
示例:
SKU123 product.id在category.id1,2,3。category.name分别为1类,2类,3类。
Sku123 的 product.keyword 目前是 "Awesome"
我想编写一个更新脚本来更新我所有的 product.keyword
...
SKU123 的 product.keyword 应该 = Awesome,类别 1、类别 2 和类别 3
...
是的,请用逗号分隔:)
我有三个table。
table 名为 "Product":
- 列名为 "id"
Table 名为 "category_product":
- 列名为 "product_id"
- 名为 "category_id" 的列
Table 名为 "category":
- 列名为 "name"
- 列名为 "id"
product.id = 产品编号
category_product.product_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