gpt4 book ai didi

mysql - 用于将列值设置为与下一行的列值相同的 SQL

转载 作者:行者123 更新时间:2023-11-29 07:53:28 25 4
gpt4 key购买 nike

我有一张这样的 table

--------------------------
id some_column
--------------------------
1 null
2 abc
3 null
4 null
5 def
6 ghi

在我的场景中,表中的一些初始行在 some_column 中为空。 所有最新行都正确设置了 some_column 值

我想运行一个查询,该查询可以通过从下一个非空值复制值来替换 some_column 的所有空值。

例如,运行查询后,表将变为

--------------------------
id some_column
--------------------------
1 abc
2 abc
3 def
4 def
5 def
6 ghi

我正在尝试这样的事情

update table as t1 set some_column = (select some_column from table as t2 where t2.id > t1.id and t2.some_column is not null limit 1) where some_column is null

但出现错误

You can't specify target table 't1' for update in FROM clause

最佳答案

您可以使用JOIN来做到这一点:

UPDATE t AS t0
JOIN (
SELECT t1.id, MIN(t2.id) new_id
FROM t AS t1
JOIN t AS t2 ON t1.id < t2.id
WHERE t1.some_column IS NULL
AND t2.some_column IS NOT NULL
GROUP BY t1.id) AS tnew ON t0.id = tnew.id
JOIN t AS t3 ON t3.id = tnew.new_id
SET t0.some_column = t3.some_column

tnew 子查询将每个具有空值的 ID 与具有非空值的下一个最高 ID 进行匹配。然后,我将其与原始表连接两次,以将要更新的行与具有替换值的行中的值。

DEMO

关于mysql - 用于将列值设置为与下一行的列值相同的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25790710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com