使用CONCAT / GROUP_CONCAT在mysql中组合多行

时间:2012-08-30 20:11:37

标签: mysql geometry

我有一张非常大的桌子(几百万条记录)。表中的列说A目前是这样的: id,道路名称,lat,lon,其中id是自动增量PK。

目前,1道路名称可以在表格中包含多个条目,因为每条道路都会映射到多个(纬度,经度)组合。

我要做的是将道路名称作为主键,然后删除lat和lon列。然后添加一个Geometry类型的列,其中包含代表道路的(lat-lon)点列表。

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

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

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

2 个答案:

答案 0 :(得分:2)

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

SELECT road_name, GROUP_CONCAT(CONCAT(lat,'x',lon)) geometry
FROM road_table
GROUP BY road_name

答案 1 :(得分: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中出现的顺序。