如何使用 join 更新空值?

How to update with join for null values?

我将使用 update from 更新我的空间数据,如下所示。

update ways w
    set end_node_id = n.node_id
from nodes n
where st_endpoint(w.shape) = n.shape 
   and w.created_at >= current_date 
   and w.created_at < current_date + interval '1 day';

此查询使用节点 table 的 node_id 更新路径 end_node_id。但是,如果任何节点被删除或修改到另一个位置,end_node_id 应该在再次查询 运行 后设置为 null。

我该如何更改 sql?

可能最简单的方法是在执行更新之前将所有内容设置为 NULL

update ways w
    set end_node_id = NULL;

然后您的更新会将 NULL 更改为其他内容。这确实会产生两次更新某些(许多?)行的开销。不过很简单。

另一种方法需要 ways 上的主键;让我称之为 way_id:

update ways w
    set end_node_id = n.node_id
from ways w2 left join
     nodes n
     on st_endpoint(w2.shape) = n.shape
where w2.way_id = w.way_id;