这可能是非常基本的,但是我不知道要搜索什么。
Table1:
someid value
1 0
2 0
3 0
Table2:
someid value
9 1
10 2
11 3
我想用Table1.value
的值逐行更新Table2.value
,没有公钥,没有table1.value row1 = table2.value
row1等的where子句,等等。像水平联合一样。
所以表1应该是:
someid value
1 1
2 2
3 3
我尝试:
update table1
set value = table2.value
from table2
但是所有值都来自表2的第一行:
1 1
2 1
3 1
答案 0 :(得分:1)
您可以使用with t as
(
select row_number() over (order by someid) as someid,
value
from table2
)
update table1 t1
set value = t.value
from t
where t1.someid = t.someid
returning t.*;
someid value
1 1
2 2
3 2
窗口分析功能尝试以下sql语句:
table1
这些返回值来自{{1}}
答案 1 :(得分: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
请参见demo。
表1的结果:
> id | value
> -: | ----:
> 1 | 1
> 2 | 2
> 3 | 3
如果您确定table1
中的id是连续的且没有间隔并且从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
请参见demo。