Я использую расширение PostGIS для PostgreSQL и иметь таблицу, как это:Как выполнить несколько SQL запросов на выборку в пакете
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 здесь, но:
- насколько я понимаю N запросы, объединенные с UNION не быстрее, чем отдельные N запросами
- изображения У меня есть 3 очка в входе, я совмещаю 3 выбирает и получает только 2 области в результате. Мне нужно понять, в какой области соответствует точка (и в какой точке нет связанной области), а это значит, что мне нужно сделать это в моем коде (который может быть длинным, если есть 3000 точек вместо 3) даже PostGIS уже сделан все проверки.
Я думаю, что можно создать временную таблицу, поставить туда точки ввода, а затем выполнить JOIN select для обеих таблиц. Но, вероятно, есть лучший способ.
Вопрос: какой более быстрый способ в PostgreSQL (или любой другой RDBMS) для N входных значений выполняет тот же запрос и получает точные результаты N в том же порядке, что и входные значения (предполагается, что для некоторых значений входных значений будет NULL)?