4

SQL Server 2008 R2 を使用しており、地域と施設の 2 つのテーブルがあります。どちらにも地理要素を含む列があります。

次のように、地理要素の交点でユニオンを計算したいと思います。

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

もちろん、これは機能しません。地域は大きなポリゴンであり、施設はそれぞれが 1 つのポリゴンにのみ含まれるポイントです。

ある種の(疑似コード)を書くことができます

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

しかし、データベースを使用することの全体的なポイントは、要素ではなくセットを操作することですよね?

それで、これを行うより良い方法はありますか?

ありがとうメラニー

4

1 に答える 1

6

STIntersect() は、SQL Server のすべてのブール関数と同様に、ビットを返すため、0 または 1
になります。これが WHERE 条件になります。

r と f の foreach は、JOIN ステートメントで暗黙的です。

SELECT r.geography, f.geography
from Regions r
join Facilities f on r.geography.STIntersects(f.geography)=1
于 2012-10-10T06:44:26.957 に答える