【发布时间】:2026-01-04 21:20:02
【问题描述】:
所以我以前只是简单地写一些类似的东西
update tableA a
set columnA = (select sum(column_that_I_need_to_count) from tableB b where st_contains(a.geom, b.geom)
但由于某种原因,这样的更新不适用于我的新数据库。它只是无限期地运行更新并且永远不会完成
现在我必须把它写成
update tableA a
set columnA = count(column_that_I_need_to_count)
from tableB b where st_contains(b.geom, a.geom)
问题是它说它不允许更新计数
创建表语句是:
create tableA (
id integer,
name text,
geom geometry(polygon, 27700)
)
create tableB(
fid bigint,
column_that_I_need_to_count integer,
name text,
geom geometry(point, 27700)
)
不同的postgresql有不同的更新子查询规则有什么原因吗?
另外如何进行实际更新?提前致谢
【问题讨论】:
-
您能否将您的真实查询与数据示例结合起来?第一个查询是OK,它应该可以工作。第二个查询是WRONG,你不能这样使用
count(*)。有很多方法可以进行这种更新。但是由于第一个查询不起作用,可能是您的数据库结构或数据存在问题。 -
@Dan 第一个查询是过去一年我是如何进行所有更新的,但现在它在这个新数据库上不起作用,它运行它但永远不会完成。第二个不像你说的那样工作,我只是想知道如何在这个新数据库上工作
-
如果它运行并且从未完成,很可能是您的数据库存在问题。反正我是根据你的信息回答的。
标签: sql postgresql sql-update