mysql - 使用同一表中的列更新行

标签 mysql sql database

我有一张看起来像这样的表:

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/

相关文章:

mysql - 如何连接多个表,包括查找表并按行返回数据

sql - 字符串 '{?District}' 在 SQL 中的计算结果是什么

php - MySQL 额外列信息

database - 将表空间从一个 postgresql 实例复制到另一个

mysql - REGEX 对非字母数字而非空格有效, '-' 个字符

mysql慢日志查询有关Query_time的详细信息

mysql - SQL - 非常复杂的查询

mysql - MediaWiki 1.16.0 - 在 phpmyadmin 中选择当前文章

php - 在 phpMyAdmin 中查询成功,但我的 PHP 脚本无法执行

mysql - SQL 将文本更改为唯一 ID 号