当前位置: 首页 > 知识库问答 >
问题:

使用选择传入父变量进行更新

薛弘阔
2023-03-14

我需要使用array_agg和空间查找的结果更新Postgres表中的几千行。

查询需要获取父表的几何图形,并返回另一个表中匹配行 ID 的数组。它可能不返回任何 ID 或可能返回 2-3 个 ID。

我尝试过使用UPDATE FROM,但似乎无法将SELECT的父表geom列传递给子查询。我看不到在两个表之间进行JOIN的任何方法。

以下是我目前的情况:

UPDATE lrc_wales_data.records
SET lrc_array = subquery.lrc_array

FROM (
    SELECT array_agg(wales_lrcs.gid) AS lrc_array 
    FROM layers.wales_lrcs 
    WHERE st_dwithin(records.geom_poly, wales_lrcs.geom, 0)
) AS subquery

WHERE records.lrc = 'nrw';

我得到的错误是:

ERROR:  invalid reference to FROM-clause entry for table "records"
LINE 7: WHERE st_dwithin(records.geom_poly, wales_lrcs.geom, 0)

这可能吗?

非常感谢,史蒂夫

共有1个答案

何向荣
2023-03-14

意识到不需要使用SET from。我可以直接在SET中使用子查询:

UPDATE lrc_wales_data.records
SET lrc_array = (
    SELECT array_agg(wales_lrcs.gid) AS lrc 
    FROM layers.wales_lrcs 
    WHERE st_dwithin(records.geom_poly, wales_lrcs.geom, 0)
)

WHERE records.lrc = 'nrw';
 类似资料:
  • 问题内容: 我试图根据选择的结果创建一个新表。这在SQL Server上可以正常工作: 现在,我想用HSQLDB(2.2版)实现完全相同的功能。我尝试了几种形式,例如 所有这些变体都会导致某种形式的语法错误。如何使用HSQLDB从select创建表? 问题答案: 的手册中有一个例子为这样的: HSQLDB 需要 在select周围加上括号(与所有其他DBMS不同),并且还需要该子句

  • 问题内容: 如何更新子查询中也存在的表?我必须分两个阶段进行吗?(创建一个临时表-将选定的数据放入其中,然后更新最终表) 我正在尝试使用每个CTN的网络标签更新invoiceLine表。 最终结果将是: invoiceLine 我有以下表格: invoiceLine ctn network 1234 null 2345 null 3456 null terminal ctn network 123

  • 如何用vscode选择多行? 在Visual Studio上,您可以按左alt键并选择多行,但它不适用于vscode。

  • 问题内容: 我想将新的Jenkinsfile用于新工作。 我在单独的存储库中有jenkinsfile: 我在bash中通过git ls-remote从另一个gitlab存储库获得分支。然后将它们存储在变量中:branch1,branch2,brach3…。 然后我想在用户输入选择中使用这些变量 然后,我将使用git部署选定的分支。 问题是我无法在用户选择的变量中使用它。 我只需要让用户从另一个gi

  • 我有一个Jqgrid,Dinamicly生成如下所示的选择:

  • 我有以下三张桌子。请原谅表名,它们是通用数据库结构命名转换的一部分。 我想编写一个查询,使用匹配的值将值插入多对多表:tbl_331_to_tbl_320_字段。如果我使用DO NOTHING参数,这是有效的。 此语句用于插入找到匹配的值。 但是我想使用DO UPDATE,所以如果有冲突,它将更新第二个id(S.id)。例如,如果我将S.field_3中的值更改为与新ID匹配的其他值,我想更新这个