I have a table called geos
which has two columns. geoName
which is a string description of a physical area which is outlined by the spatial Polygon in the geoPoly
column. Each record is either a country or a city which may be in one of those countries.
For each geoName, I want to get a list of the names of all intersecting polygons into a single column.
So if geos
looks like this:
geoName | geoPoly |
---|---|
Mumbai | Polygon1 |
Chennai | Polygon2 |
New York | Polygon3 |
United States | Polygon4 |
India | Polygon5 |
Paris | Polygon6 |
Chicago | Polygon7 |
Los Angeles | Polygon7 |
Using the query below, I'm able to get a table that returns just one result in the intersectingGeo column.
SELECT geos1.geoName AS targetGeo, geos2.geoName AS intersectingGeo
FROM geos geos1, geos geos2
WHERE ST_INTERSECTS(geos1.geoPoly, geos2.geoPoly)
AND geos1.geoName <> geos2.geoName
GROUP BY targetGeo
Which outputs:
geoName | intersectingGeo |
---|---|
Mumbai | India |
Chennai | India |
New York | United States |
India | Mumbai |
Chicago | United States |
Chicago | Los Angeles |
But is it possible to get a concatenated list of the geoNames of all intersecting Polygons, like this?
geoName | geoPoly |
---|---|
Mumbai | India |
Chennai | India |
New York | United States |
United States | New York, Chicago, Los Angeles |
India | Chennai, Mumbai |
Chicago | United States |
All of the CONCAT examples I can find have just one