如何批量执行多个SQL选择查询

时间:2016-08-20 18:40:56

标签: sql postgresql postgis

我为PostgreSQL使用Postgis扩展,并且有这样的表:

CREATE TABLE areas
(
    id integer NOT NULL DEFAULT nextval('areas_id_seq'::regclass),
    name character varying(1024) NOT NULL,
    shape geometry NOT NULL,
    CONSTRAINT pk_id PRIMARY KEY (id)
)

我的应用程序收到几个坐标点(lat / lng对),对于每个点我需要找到相应的区域。所以单点的SQL看起来像

SELECT id, name FROM areas WHERE ST_Within(shape, ST_MakePoint(lng, lat));

但是我需要为几个点执行此查询。我可以为每个点执行单独的查询,但我想有一种方法可以通过单个查询来实现它。

当然我可以在这里使用UNION,但是:

  • 据我了解,与UNION联合的N个查询并不比单独的N个查询快
  • 图像我输入有3个点,我结合了3个选择,结果只得到2个区域。我需要了解哪个点对应哪个区域(以及哪个点没有关联区域),这意味着我需要在我的代码中执行它(如果有3000个点而不是3个,可能很长)甚至PostGIS已经制作所有检查。

我认为可以创建临时表,在那里放置输入点,然后对两个表执行JOIN选择。但可能有更好的方法。

所以问题是:对于N个输入值,PostgreSQL(或任何其他RDBMS)中更快的方式是执行相同的查询并获得与输入值相同的精确N结果(假设对于某些输入值结果将为NULL) ?

1 个答案:

答案 0 :(得分:0)

嗯,你可以尝试这样的事情:

SELECT a.id, a.name, p.which
FROM areas a JOIN
     (SELECT lng1 as lng, lat1 as lat, 'point1' as which UNION ALL
      SELECT lng2, lat2, 'point2' as which
     ) p
     ON ST_Within(a.shape, ST_MakePoint(p.lng, p.lat));