mysql - 如何使用另一行中的值填充所有行中的空列

标签 mysql

我有这张表:

num | id | value1 | value2 | ..... | valueN
____|____|________|________|_______|_______
 1  |  1 |  val1  | val2   | ..... | valN
 2  |  1 |  blah  | NULL   | ..... | NULL
 1  |  2 | val12  | val22  | ..... | valN2
 2  |  2 | blah2  | NULL   | ..... | NULL

numid 是主键。具有 1 num 的每一行是填充了所有列的行,以及该 id 的所有其他行(其中 num 大于 1 )有空列,我想用具有相同 idnum=1 中的列中的相应值进行填充。

我可以编写一个脚本,该脚本在所有 num >1 行上运行,然后在每个 空列上运行,并从 num 中获取它>=1 行,但是有没有更 SQL 的方式来做到这一点?更通用的东西,无需迭代每一列?

最佳答案

好吧,您可以尝试使用 cross-table UPDATE JOIN 更新所有行

UPDATE mytbl AS a
INNER JOIN (SELECT * FROM mytbl WHERE num = 1) AS b ON a.id = b.id
SET a.value1 = b.value1,
  a.value2 = b.value2,
...
  a.valueN = b.valueN
WHERE  a.num > 1 

关于mysql - 如何使用另一行中的值填充所有行中的空列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28409399/

相关文章:

java - 一个在intelliJ中运行但不在cmd中运行的java应用程序

c++ mysql 连接 bad_alloc 使用 c++ 连接器

Java:空值解析 XML 文件

php - 检查行是否存在时出现问题?

带有 DATEDIFF 的 MySQL 查询

mysql - 无法检查字段是否还包含数字

php - 将 foreach 作为数组提交到 MySQL

MySQL ORDER BY CASE 优化

Mysql where 多行

mysql - 有没有办法在 mysql 中创建 DATETIME 列,默认为 UTC 中的当前时间戳?