这可能是非常基本的,但是我不知道要搜索什么。
Table1:
someid value
1 0
2 0
3 0
Table2:
someid value
9 1
10 2
11 3
我想Table1.value
用Table2.value
逐行更新值,没有公共键,没有where子句只是table1.value row1 = table2.value
row1等。像水平联合一样。
因此,表1应该是:
someid value
1 1
2 2
3 3
我尝试:
update table1
set value = table2.value
from table2
但是所有值都来自table2的第一行:
1 1
2 1
3 1
您可以使用row_number()
:
update table1
set value = t2.value
from (
select id, value, row_number() OVER (ORDER BY id) AS n from table1
) t inner join (
select id, value, row_number() OVER (ORDER BY id) AS n from table2
) t2 on t.n = t2.n
where t.id = table1.id
参见演示。
表1的结果:
> id | value
> -: | ----:
> 1 | 1
> 2 | 2
> 3 | 3
如果您确定ID中的IDtable1
是连续的且没有间隔并且从1开始,则可以像下面这样简化查询:
update table1
set value = t2.value
from (
select id, value, row_number() OVER (ORDER BY id) AS n from table2
) t2
where t2.n = table1.id
参见演示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句