使用派生表的多个字段进行查询

问题描述

我有以下表格:

function bar() {
  return new Promise((resolve) => {
    if (Math.random() < 0.5) {
      return resolve('return');
    } else {
      throw 'throw';
    }
  });
}

您可以将 CREATE TABLE IF NOT EXISTS "walks" ( id varchar(36),PRIMARY KEY (id) ); CREATE TABLE IF NOT EXISTS "points" ( id varchar(36),time timestamp(6) with time zone,geometry geometry(Point,4326),walk_id varchar(36),FOREIGN KEY (walk_id) REFERENCES walks (id) ) 视为表示串联在一起的一组有序点: walk

我正在尝试按行走顺序选择所有点,但仅针对与给定多边形相交的行走(即在多边形内具有点的行走)。此外,我想选择一个布尔值,表示每个返回的点是否在该区域内。

我想出了以下查询可以正常工作:

---O------O---O-O-----O---

但这似乎效率低下,因为 PostGIS Intersects 函数必须对所有内容调用两次。

是否可以在派生表或其他东西中同时选择相交点 ID 和步行 ID,然后在 SELECT(用于布尔值)和 WHERE(过滤正确的步行)中引用它们?

解决方法

如果没有示例数据,很难完全理解您的用例,但 CTE 可能会简化一些事情。类似的东西:

WITH p AS (
  SELECT id,geometry,walk_id,time,ST_Intersects(geometry,'SRID=4326;POLYGON((-81.8 -0.5,-81.1 -0.5,-81.1 -1.5,-81.8 -1.5,-81.8 -0.5))') AS in_area   
  FROM points )
SELECT p.id,w.id AS walk_id,p.geometry,p.in_area FROM p
JOIN walks w ON w.id = p.walk_id
WHERE p.in_area IS TRUE ORDER BY p.time ASC;