联接多个查询结果表

时间:2019-02-06 12:58:35

标签: mysql sql database join postgis

我有两个表,如下所示:

表#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 :(得分:1)

您可以尝试下面的代码,我使用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';

答案 1 :(得分:0)

下面的此查询可解决问题:

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