我有两个表,如下所示:
我想要做的是将两个表合并为一个表。但是不是“直接”使用表,而是使用表的查询结果表。
我有3个要加入的查询结果表:
SELECT "from", st_x(st_pointn(geom,1)), st_y(st_pointn(geom,1))
FROM public.graph;
SELECT "to", st_x(st_pointn(geom,st_npoints(geom))), st_y(st_pointn(geom,st_npoints(geom)))
FROM public.graph;
SELECT id, priority
FROM public.junctions;
如上所述,这3个结果查询表现在应该连接到一个看起来像这样的表中:
基本上,这意味着我想联接前两个结果查询表,删除所有重复的条目,然后联接第三个结果查询表,以便每个条目都具有优先级。
如何使用SQL实现此目的?我需要哪些联接,联接结果表查询时的语法如何? 预先感谢!
答案 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