在 Postgres 的 PostGis 上通过 JOIN 子句执行多个最近邻查询
Perform multiple nearest neighbor query by JOIN clause on PostGis in Postgres
有查询table
create table query (q geometry(Point));
和一个数据table
create table data (d geometry(Point));
create index on data using gist(d);
对于查询中的每个点P,我可以通过
查询它最近的邻居
select P,data.d from query order by P<->data.d limit 1;
现在我想在table“查询”中一起执行这个最近邻查询,而且我也想使用索引。因此,我得到一个包含两列的结果 table,第一列与“查询”中的每一行相同,第二列是从“数据”中检索到的最近邻居。
这可能吗?如何表达?
您需要 LATERAL 连接,其中子查询可以引用连接列表中较早 table 的列。
SELECT * FROM query CROSS JOIN LATERAL
(SELECT * FROM data ORDER BY q<->d LIMIT 1) foo;
有查询table
create table query (q geometry(Point));
和一个数据table
create table data (d geometry(Point));
create index on data using gist(d);
对于查询中的每个点P,我可以通过
查询它最近的邻居select P,data.d from query order by P<->data.d limit 1;
现在我想在table“查询”中一起执行这个最近邻查询,而且我也想使用索引。因此,我得到一个包含两列的结果 table,第一列与“查询”中的每一行相同,第二列是从“数据”中检索到的最近邻居。
这可能吗?如何表达?
您需要 LATERAL 连接,其中子查询可以引用连接列表中较早 table 的列。
SELECT * FROM query CROSS JOIN LATERAL
(SELECT * FROM data ORDER BY q<->d LIMIT 1) foo;