[英]SQL for setting column value same as next row's column value
我有這樣的桌子
--------------------------
id some_column
--------------------------
1 null
2 abc
3 null
4 null
5 def
6 ghi
在我的場景中,表中的某些初始行在some_column中為null。 所有最新的行均已正確設置some_column值 。
我想運行一個查詢,該查詢可以通過從下一個非null值復制值來替換some_column的所有null值。
例如,運行查詢后,表將變為
--------------------------
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匹配。 然后,我將其與原始表連接兩次,以將要更新的行與該行的值與替換值配對。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.