mysql 某列值为0时,用最近一行有同样parant_id的对应值更新
时间: 2024-03-13 19:46:13 浏览: 64
要实现将某列为0的行用同一parent_id的最近一行对应值进行更新的需求,可以使用MySQL中的UPDATE语句结合子查询和窗口函数来实现。以下是一个示例查询,假设我们的表名为`my_table`,包含一个`parent_id`列和一个要更新的`my_column`列,按照`id`升序排列:
```
UPDATE my_table
SET my_column = (
SELECT last_value
FROM (
SELECT id,
parent_id,
CASE WHEN my_column = 0
THEN LAST_VALUE(CASE WHEN my_column != 0 THEN my_column END IGNORE NULLS)
OVER (PARTITION BY parent_id ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
ELSE my_column
END AS last_value
FROM my_table
) sub
WHERE sub.id = my_table.id
)
WHERE my_column = 0;
```
这个查询中的窗口函数使用了`PARTITION BY parent_id`语句,表示按照`parent_id`列分组,然后在每个分组内使用`ORDER BY id`语句按照递增的`id`值排序,获取每个分组内前一行的非零值。最后在UPDATE语句中使用WHERE子句筛选出需要更新的行,将填充值赋给这些行的`my_column`列。
请注意,由于窗口函数的使用,这个查询只能在MySQL 8.0及以上版本中运行。同时,如果表中存在大量需要更新的行,这个查询可能会比较耗时,请谨慎使用。
阅读全文