如何为每一行更新不同的值?

P.V*_*.V. 1 postgresql join sql-update

我有一个Postgres表predicted_data

 id | lat | lon | predicted
----+-----+-----+-----------
  1 |   1 |   1 |         10
  2 |   2 |   2 |         20
  3 |   3 |   3 |         30
Run Code Online (Sandbox Code Playgroud)

我有另一个表observed_data

 id | lat | lon | observed | error
----+-----+-----+----------+-------
  1 |   1 |   1 |       11 |
  2 |   2 |   2 |       25 |
  3 |   3 |   3 |       32 |
Run Code Online (Sandbox Code Playgroud)

我要填充的errorobserved_data。对于第一行,我将执行以下操作:

UPDATE observed_data 
SET error = 
((SELECT predicted FROM predicted_data WHERE lat = 1 AND lon = 1) - (SELECT observed FROM observed_data WHERE lat = 1 AND lon = 1)) 
WHERE lat = 1 AND lon = 1 AND id = 1;
Run Code Online (Sandbox Code Playgroud)

有什么办法可以编写此查询,以便一次对每一行执行此查询?

我的最终结果应该是:

 id | lat | lon | observed | error
----+-----+-----+----------+-------
  1 |   1 |   1 |       11 |    -1
  2 |   2 |   2 |       25 |    -5
  3 |   3 |   3 |       32 |    -2
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 6

您可以对联接使用UPDATE:

update observed_data as od
  set error = pd.predicted - od.observed
from predicted_data as pd 
where (pd.lat, pd.long) = (od.lat, od.long);
Run Code Online (Sandbox Code Playgroud)