如何在PostgreSQL中编写查询以在整个加入过程中累积项目?

时间:2017-10-08 12:41:12

标签: sql postgresql postgis

我们有一个空间数据库,其中包含多个段的方式(街道,小巷,高速公路......),例如每条街道被分成几行,我们在其中有节点(如几何)和名称。我们希望另一个表包含其名称和节点的连接方式。我们必须递归地将表格与自己连接在一起,以便拥有公共节点,然后将(聚合)节点和id累积到数组中。我尝试了几种方法为此创建一个真正的查询但没有成功:我尝试使用递归和join一起使用。我也试过使用横向连接。我想我必须混合使用几种技术。这是我的(错误)查询:

WITH RECURSIVE result(id1, id2, ids, "name", nodes) AS
(SELECT
w1.id                AS id1,
w2.id                AS id2,
ARRAY [w1.id, w2.id] AS ids,
w1.name              AS name,
w1.nodes || w2.nodes AS nodes
 FROM
  (SELECT
    id,
    ways.name,
    nodes
FROM ways
WHERE ways."name" IS NOT NULL AND tagshstore ? 'highway') w1
JOIN
(SELECT
  id,
  ways.name,
  nodes
FROM ways
WHERE ways."name" IS NOT NULL AND tagshstore ? 'highway') w2
 ON
   w1.nodes && w2.nodes
   AND
   w1.name = w2.name
   AND
   w1.id < w2.id)

SELECT
  result.name AS "name",
  array_agg(ways.id) || result.ids as ids,
  array_agg(result.nodes)
--INTO ways_connected
FROM result
  JOIN ways
    ON result.name = ways.name AND result.nodes && ways.nodes
GROUP BY result.ids, result.name;

0 个答案:

没有答案