2012-08-30 39 views
0

我有一個非常大的表(數百萬條記錄)。表中的列表示A現在是這樣的: id,道路名稱,lat,lon其中id是自動增量PK。在使用CONCAT/GROUP CONCAT的mysql中組合多行

當前1道路名稱可以在表中有多個條目,因爲每條道路都映射到若干(經度,緯度)組合。

我想要做的是將道路名稱作爲主鍵,然後刪除lat和lon列。然後添加一個類型爲Geometry的列,該列將包含代表道路的(lat - lon)點列表。

我可以很容易地在java + mysql中做到這一點,但我想知道的是,如果有一種方法可以通過編寫幾個嵌套查詢來輕鬆完成此操作?基本上我已經有一個填充表A和另一個表B,只有道路名稱PK和幾何類型的第二列。我想要的是結合所有經緯度,每個獨特的道路名稱lon到幾何點列表並插入到表B.是否有可能在MySQL中做到這一點?

注意:不要擔心道路名稱的唯一性,因爲這僅僅是一個示例,而不是實際的場景。謝謝!

更新:concat/group_concat函數返回一個String。由於我的列類型是Geometry,我只是將此字符串傳遞給MySQL Spatial Extension中的GeomFromText()空間函數以獲取幾何格式。

回答

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.

+0

THanks Gordon,正是我在找的東西。 – kriver

2

這將填補幾何列與逗號分隔的<lat>x<lon>對列表。

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

謝謝Barmar!簡單而公正的作品。我要標記戈登作爲答案,因爲我覺得他的查詢將對進一步定製更有幫助。 – kriver