我为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,但是:
我认为可以创建临时表,在那里放置输入点,然后对两个表执行JOIN选择。但可能有更好的方法。
所以问题是:对于N个输入值,PostgreSQL(或任何其他RDBMS)中更快的方式是执行相同的查询并获得与输入值相同的精确N结果(假设对于某些输入值结果将为NULL) ?
答案 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));