如何使用 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;
我将使用 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;