【问题标题】:Postgres Update Using Select Passing In Parent VariablePostgres 更新使用 Select 传入父变量
【发布时间】:2016-12-22 22:23:50
【问题描述】:

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

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

我尝试使用 UPDATE FROM,但似乎无法将 SELECT 的父表 geom 列传递到子查询中。我看不到在 2 个表之间进行 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)

这可能吗?

非常感谢, 史蒂夫

【问题讨论】:

    标签: postgresql postgis


    【解决方案1】:

    意识到没有必要使用 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';
    

    【讨论】:

      猜你喜欢
      • 2016-10-26
      • 2021-06-09
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多