#sql #postgresql
#sql #postgresql
Вопрос:
У меня есть 2 таблицы Temp и Final. Я хочу вставить данные из временной таблицы в конечную таблицу. Для этого уже написан сложный запрос.
INSERT INTO public.Final
(
select id, class, type, meta_id, time, zone, geom
from public.Temp where ....
)
Теперь я хочу добавить дополнительные критерии для геометрии, где я хочу объединить полигоны, а затем удалить перекрывающиеся геометрии. У меня есть 2 отдельных запроса, написанных для этих задач. Я не могу объединить в один выбор, поскольку он уже сложный.
Эти запросы я хочу применить перед вставкой данных в итоговую таблицу. Возможно ли, что вывод одного запроса выбора переходит на ввод другого запроса выбора?
INSERT INTO public.Final
(
/*step 3 final output */
select non overlapping geometries where ...
(/*step 2*/
select merged geometries
where ...
(/*step 1*/select valid geometries where ...)
)
)
Если бы вы могли привести мне какой-либо пример того, как это сделать, это было бы здорово! Спасибо.
Ответ №1:
да, существует несколько способов, но требуется более подробная информация, чтобы лучше понять, какой способ подходит для вашего случая :
- использование
JOIN
:
SELECT *
FROM (SELECT * FROM COMPLEXQUERY1) AS Q1
JOIN (SELECT * FROM COMPLEXQUERY2) AS Q2
ON Q1.ID = Q2.ID
JOIN (SELECT * FROM COMPLEXQUERY3) AS Q3
ON Q2.ID = Q3.ID
- использование
IN
и / илиEXISTS IN
:
SELECT *
FROM (SELECT * FROM COMPLEXQUERY1) AS Q1
WHERE EXISTS
(
SELECT * FROM COMPLEXQUERY2 Q2
WHERE Q1.ID = Q2.ID
AND Q2.ID2 IN
(
SELECT id from COMPLEXQUERY3
)
)