我有一张非常大的桌子(几百万条记录)。表中的列说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()空间函数以获得几何格式。
答案 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中出现的顺序。