Объединить несколько таблиц результатов запроса - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть две таблицы:

таблица № 1: график

enter image description here

таблица № 2: соединения

enter image description here

Я хочу объединить обе таблицы в одну таблицу.Но не с таблицами "напрямую", а с таблицами результатов запросов таблиц.

У меня есть 3 таблицы результатов запросов, к которым я хочу присоединиться:

таблица результатов запросов № 1:

SELECT "from", st_x(st_pointn(geom,1)), st_y(st_pointn(geom,1))
FROM public.graph;

enter image description here

таблица результатов запроса № 2:

SELECT "to", st_x(st_pointn(geom,st_npoints(geom))), st_y(st_pointn(geom,st_npoints(geom)))
FROM public.graph;

enter image description here

таблица результатов запроса № 3:

SELECT id, priority
FROM public.junctions;

enter image description here

Как я уже писал выше, эти 3 таблицы результатов запроса теперь должны быть объединены в однутаблица, которая должна выглядеть следующим образом:

enter image description here

Что в основном означает, что я хочу присоединиться к первым двум таблицам запросов результатов, удалить все повторяющиеся записи и затем присоединиться ктретья таблица запроса результатов, так что каждая запись дополнительно имеет приоритет.

Как этого добиться с помощью SQL?Какие объединения мне нужны и каков синтаксис при объединении запросов к таблице результатов?Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Этот запрос ниже делает трюк:

Select "from", st_x, st_y, priority from (SELECT "from" , st_x(st_pointn(geom,1)) , 
st_y(st_pointn(geom,1)) 
FROM public.graph
union
SELECT "to", st_x(st_pointn(geom,st_npoints(geom))) , 
st_y(st_pointn(geom,st_npoints(geom))) 
FROM public.graph
order by "from") as nodes  inner join
junctions on nodes."from" = id
0 голосов
/ 06 февраля 2019

Вы можете попробовать следующий код, я использовал cte для разделения каждого результата, и в конце я объединил их в один запрос, чтобы отобразить желаемый результат.Вы можете изменить условие JOIN или выбрать столбцы, необходимые для вывода.

WITH CTE_result1 AS
(
SELECT "from", st_x(st_pointn(geom,1)), st_y(st_pointn(geom,1))
FROM public.graph
),
CTE_result2 AS
(
SELECT "to", st_x(st_pointn(geom,st_npoints(geom))), st_y(st_pointn(geom,st_npoints(geom)))
FROM public.graph
),
CTE_result3 AS
(
SELECT id, priority
FROM public.junctions
)
SELECT
        CTE_result1.ID,
        CTE_result1.st_x    AS x,
        CTE_result1.st_y    AS Y,
        priority
FROM
        CTE_result1
    JOIN
        CTE_result2
            ON 'from' = 'To'
    JOIN
        CTE_result3
            ON ID = 'FROM'
               AND ID = 'To';
...