Как изменить данные запроса select перед вставкой из одной таблицы в другую таблицу

#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:

да, существует несколько способов, но требуется более подробная информация, чтобы лучше понять, какой способ подходит для вашего случая :

  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 
 
  1. использование 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
       )
)