我有一张看起来像这样的表:
id_product | id_code | content
----------- | ------- | -------------------
1 | 1 | a
1 | 2 | ''
1 | 3 | ''
2 | 1 | b
2 | 2 | ''
2 | 3 | ''
3 | 1 | c
3 | 2 | ''
3 | 3 | ''
我想要达到的结果是这样的:
id_product | id_code | content
----------- | ------- | -------------------
1 | 1 | a
1 | 2 | a
1 | 3 | a
2 | 1 | b
2 | 2 | b
2 | 3 | b
3 | 1 | c
3 | 2 | c
3 | 3 | c
简而言之,我希望查询为每个 id_product 复制内容列,其中 id_code 为 1。
据我所知,它需要结合连接的更新查询,但我不确定如何将其串在一起。最难的部分似乎是使其动态化,以便它可以对所有 id_products 执行查询。
如果需要更多信息,请告诉我。
这是一个演示链接:https://www.db-fiddle.com/f/2bmVgH9h2Q9uUrp7Q1MfR6/0
最佳答案
请注意,每组 id_product
记录都有一个 content
值,该值不是空字符串(或 NULL
?)。我们可以使用子查询为每个 id_product
组提取这个非空的 content
值,然后使用连接更新查询来填充空白。
UPDATE product p1
INNER JOIN
(
SELECT id_product, MAX(content) AS content
FROM products
GROUP BY id_product
) p2
ON p1.id_product = p2.id_product
SET p1.content = p2.content
在这里使用 MAX
技巧是有效的,因为任何字母都大于空字符串,而且 MAX
忽略 NULL
值,所以我们是在任何一种情况下都涵盖。
请注意,我没有 WHERE
子句,因为每个 id_product
组最终都具有所有相同的 content
值。
关于mysql - 使用同一表中的列更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45842219/