0

我有一个非常大的表(几百万条记录)。表中的列 A 当前如下所示:id、道路名称、lat、lon 其中 id 是自动增量 PK。

目前 1 个道路名称在表中可以有多个条目,因为每条道路都映射到多个 (lat, lon) 组合。

我想要做的是将道路名称作为主键,然后删除 lat 和 lon 列。然后添加一个几何类型的列,该列将包含代表道路的(经纬度)点列表。

我可以在 java + mysql 中轻松做到这一点,但我想知道是否有一种方法可以通过编写几个嵌套查询来轻松做到这一点?基本上我已经有一个填充表 A 和另一个表 B,其中只有道路名称为 PK 和几何类型的第二列。我想要的是将每个唯一道路名称的所有纬度、经度组合到一个几何点列表并插入到表 B 中。是否可以在 mysql 中执行此操作?

注意:不要担心道路名称的唯一性,因为这只是一个示例,而不是实际情况。谢谢!

更新: concat/group_concat 函数返回一个字符串。由于我的列类型是几何,我只需将此字符串传递给 MySQL 空间扩展中的 GeomFromText() 空间函数以获取几何格式。

4

2 回答 2

2

这将用逗号分隔的<lat>x<lon>对列表填充几何列。

SELECT road_name, GROUP_CONCAT(CONCAT(lat,'x',lon)) geometry
FROM road_table
GROUP BY road_name
于 2012-08-30T20:40:39.743 回答
1

我认为以下查询将满足您的要求:

select RoadName,
       group_concat(RoadPoint order by id separator ',') as geometry
from (select A.*,
             concat('(', lat, ',', long, ')') as RoadPoint
      from A
     ) t
group by RoadName

这将按照点在 A 中出现的顺序将列表生成为逗号分隔的子列表。

于 2012-08-30T20:38:49.560 回答