使用 Select 传入父变量的 Postgres 更新
Postgres Update Using Select Passing In Parent Variable
我需要使用 array_agg 和空间查找的结果更新我的 Postgres table 中的几千行。
查询需要获取父项 table 的几何图形,以及 return 另一个 table 中匹配行 ID 的数组。它可能 return 没有 ID 或可能有 2-3 个 ID。
我尝试使用 UPDATE FROM,但我似乎无法将 SELECT 的父 table geom 列传递到子查询中。我看不到在 2 table 之间进行 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)
这可能吗?
非常感谢,
史蒂夫
意识到不需要使用 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';
我需要使用 array_agg 和空间查找的结果更新我的 Postgres table 中的几千行。
查询需要获取父项 table 的几何图形,以及 return 另一个 table 中匹配行 ID 的数组。它可能 return 没有 ID 或可能有 2-3 个 ID。
我尝试使用 UPDATE FROM,但我似乎无法将 SELECT 的父 table geom 列传递到子查询中。我看不到在 2 table 之间进行 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)
这可能吗?
非常感谢, 史蒂夫
意识到不需要使用 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';