在 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;