2011-10-05 18 views
7

Ho 2 tavoli uno con punti come aree geografiche e altri con poligoni come aree geografiche. Sono in grado di trovare quale Poligono un unico punto cade (dalla tabella punto) dal seguente query:SQL Spatial Join

DECLARE @p geography; 
select @p = PointGeom from dbo.PointTable where ID = 1 
SELECT a.ID, ATTRIBUTE1, geom 
from dbo.PolygonTable a 
where geom.STIntersects(@p) = 1; 

Tuttavia, voglio fare un join tra le due tabelle e ottenere i poligoni in cui ciascuno dei punti nella caduta della tabella dei punti. È possibile? O devo passare attraverso la tabella Point e chiamare la query sopra più volte?

risposta

12

Questo dovrebbe funzionare:

SELECT 
    polyTable.[PolygonID] 
, pointTable.[PointID] 
FROM 
[PolygonTable_Name] polyTable WITH(INDEX([SPATIAL_INDEX_NAME])) 
INNER JOIN 
[PointTabl_Name] pointTable 
ON 
polyTable.Geog.STIntersects(pointTable.Geog) = 1 

Ho aggiunto un hint di indice "CON (INDEX (...))" come questo potrà accelerare la query.