Sql 将查询生成的值插入空白列

Sql 将查询生成的值插入空白列,sql,postgresql,postgis,Sql,Postgresql,Postgis,我试图计算在表1的每个多边形中找到的点数(存储在表2中)。该查询可以工作,但我尝试对其进行修改,以将生成的值添加到表1中的空白列中 到目前为止,它只能通过将结果追加到表的底部来工作。有什么帮助吗?总之,我试图将此查询生成的值添加到表1中,并将它们添加到表1中。目前,查询将它们插入到表1中的空白列中,但与ID没有匹配,但在底部追加。 INSERT INTO table1(field3) SELECT COUNT(table2.id) AS count1 FROM table1 LEFT JOIN

我试图计算在表1的每个多边形中找到的点数(存储在表2中)。该查询可以工作,但我尝试对其进行修改,以将生成的值添加到表1中的空白列中

到目前为止,它只能通过将结果追加到表的底部来工作。有什么帮助吗?总之,我试图将此查询生成的值添加到表1中,并将它们添加到表1中。目前,查询将它们插入到表1中的空白列中,但与ID没有匹配,但在底部追加。

INSERT INTO table1(field3) 
SELECT COUNT(table2.id) AS count1
FROM table1 LEFT JOIN table2
ON ST_Contains(table1.geom,table2.geom)
GROUP BY table1.id;

我在这里做的唯一更改是将左连接切换为内部连接。如果表1中的几何图形不包含表2中的几何图形,则字段3的值将保持为空,因此您可能希望首先执行“更新表1设置字段3=0”(根据您拥有的要素数量和每个几何图形拥有的点数,分两步执行可能会快一点)

备选方案:

update table1 a
set field3 = b.count1
from
(
  SELECT table1.id,
         COUNT(table2.id) AS count1
  FROM table1
         left JOIN table2
           ON ST_Contains(table1.geom,table2.geom)
  GROUP BY table1.id
) b
where a.id = b.id
还有,今天早上刚刚出现在reddit上。我并没有花太多时间去研究它,但它看起来很有希望成为(在postgres特定环境中)学习sql的(另一种)资源


编辑:对于我第一次发布的两步方法,我开始怀疑自己——我认为它的性能几乎完全错误,因此我包含了一个替代查询。

您需要
更新
,以便将数据填充到符合
连接
条件的现有行中。您能用一些示例数据创建一个新的应用程序吗?我很难做到这一点,因为它使用的PostGIS函数在sqlfiddle中不起作用。或者我遗漏了什么?你没有遗漏任何东西-sqlfiddle数据库中没有安装postgis。
update table1 a
set field3 = b.count1
from
(
  SELECT table1.id,
         COUNT(table2.id) AS count1
  FROM table1
         left JOIN table2
           ON ST_Contains(table1.geom,table2.geom)
  GROUP BY table1.id
) b
where a.id = b.id