【问题标题】:ERROR: more than one row returned by a subquery used as an expression错误:用作表达式的子查询返回多行
【发布时间】:2018-02-13 03:27:14
【问题描述】:

我正在做 pgrouting a Practical Guide 书中的一个示例,但使用我自己的表格,我遇到了这个错误。我已经使用 LIMIT 1 来避免这个错误,就像书中的例子一样,但肯定还有另一个错误。有关修复的任何想法?

错误:

用作表达式的子查询返回多于一行

SELECT *
    FROM pgr_drivingDistance(
    'SELECT id, source, target,
        cost
        FROM network.roads',
    (SELECT v.id
      FROM network.master_table AS h
        ,LATERAL (SELECT id FROM network.roads_vertices_pgr  AS n
           ORDER BY h.geom <-> n.the_geom LIMIT 1 ) AS v),
       5000, false, false
    );

【问题讨论】:

    标签: sql postgis postgresql-9.4 pgrouting


    【解决方案1】:

    限制 1 开启

    SELECT id FROM network.roads_vertices_pgr  AS n
           ORDER BY h.geom <-> n.the_geom LIMIT 1
    

    错误是在整个子查询上,

    (SELECT v.id
          FROM network.master_table AS h
            ,LATERAL (SELECT id FROM network.roads_vertices_pgr  AS n
               ORDER BY h.geom <-> n.the_geom LIMIT 1 ) AS v)
    

    这是network.master_table 上的CROSS JOIN LATERAL 和该子查询的结果(您知道它是一行)。因此,如果 network.master_table 上的 SELECT 返回多于一行,则会出现该错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多