【问题标题】:Join multiple query result tables加入多个查询结果表
【发布时间】:2019-02-06 12:58:34
【问题描述】:

我有两个表如下:

表 #1:图表

表 #2:路口

我想要做的是将两张表连接到一张表中。但不是“直接”用表,而是用表的查询结果表。

我有 3 个要加入的查询结果表:

查询结果表#1:

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

查询结果表#2:

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

查询结果表#3:

SELECT id, priority
FROM public.junctions;

正如我在上面所写的,这 3 个结果查询表现在应该连接到一个应该如下所示的表:

这基本上意味着我想加入前两个结果查询表,删除所有重复的条目,然后加入第三个结果查询表,这样每个条目都有一个优先级。

如何使用 SQL 实现这一点?我需要哪些连接以及连接结果表查询时的语法如何? 提前致谢!

【问题讨论】:

    标签: mysql sql database join postgis


    【解决方案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';
    

    【讨论】:

    • 您好 auro,首先非常感谢您的回答。我已经尝试过了,但是在执行查询时遇到了错误。我说列引用“st_x”不明确(查询中的第 18 行)。我认为这是因为 CTE_result1 和 CTE_result2 具有相同的列(st_x 和 st_y)。你知道如何解决这个问题吗?
    • @user7335295 我已经更新了我的答案。您现在可以尝试执行它吗?当两个表中都存在该列时,我们需要指定我们需要从哪个表中获取数据。
    【解决方案2】:

    下面的这个查询可以解决问题:

    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
    

    【讨论】:

      猜你喜欢
      • 2017-09-28
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 2013-12-14
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多