Объединение серверов SQL в столбцах географии

Я использую sql server 2008 R2, и у меня есть две таблицы: регионы и объекты. Оба имеют столбец, содержащий элемент географии.

Я хочу рассчитать объединение на пересечении элементов географии, например:

SELECT * from Regions join Facilities on [Regions].[geography].STIntersects([Facilities].[geography])

что конечно не работает. Регионы представляют собой большие полигоны, а объекты — точки, каждая из которых содержится только в одном полигоне.

Я могу написать какой-нибудь (псевдокод)

for each r in Regions:
    for each f in Facilities:
        if f.[geography].STIntersects(r.[geography]):
            print r, f

но весь смысл использования базы данных заключается в том, чтобы работать с набором, а не с элементами, верно?

Итак, есть ли лучший способ сделать это?

спасибо Мелани


person Melanie    schedule 10.10.2012    source источник
comment
Разве это не печатает (r,f)? SELECT r.geography, f.geography from Regions r join Facilities f on r.geography.STIntersects(f.geography)=1   -  person RichardTheKiwi    schedule 10.10.2012
comment
да, это так - поставьте это как ответ, и я приму это - спасибо. Магия заключается в том, чтобы поставить =1 в конце.   -  person Melanie    schedule 10.10.2012


Ответы (1)


STIntersect(), как и все логические функции SQL Server, возвращает бит, то есть 0 или 1.
Это становится вашим условием WHERE.

Оператор foreach для r и f неявно указан в операторе JOIN.

SELECT r.geography, f.geography
from Regions r
join Facilities f on r.geography.STIntersects(f.geography)=1
person RichardTheKiwi    schedule 10.10.2012