STIntersectsどっちが良いのか


例えば島根県に重なる地物をとる時は下記のように、一旦変数入れる方法と、結合の2択あるがどっちが良いのだろうか。。。
クエリ二重に回すようなパターンならば結合の方がマシなのは間違いないが。

DECLARE @shp GEOMETRY

SELECT
 @shp = GEOMETRY::UnionAggregate(Shape)
FROM
 JPN71
WHERE
 KEN=N'島根県';

SELECT
 *
FROM 
 JPN71 TAB
WHERE
 TAB.Shape.STIntersects(@shp) = 1;

SELECT
 TAB.*
FROM
 JPN71 TAB
INNER JOIN
( SELECT GEOMETRY::UnionAggregate(Shape) SHP FROM JPN71 WHERE KEN=N'島根県') DST
ON
 DST.SHP.STIntersects(TAB.Shape) = 1;


完全に含む含まれるとかもあるが、何パターンか同一の回答に至る経路がある。

 
--geometry インスタンスと別の geometry インスタンスが空間的に連結されていない場合 1 を返します。 それ以外の場合は 0 
SELECT
 *
FROM
 JPN71 TAB
WHERE
 @shp.STDisjoint(TAB.Shape) = 0


--geometry インスタンスが別の geometry インスタンスに完全に含まれている場合
SELECT
 *
FROM
 JPN71 TAB
WHERE
 TAB.Shape.STWithin(@shp) = 1;

--geometry インスタンスが別の geometry インスタンスを完全に含む場合
SELECT
 *
FROM
 JPN71 TAB
WHERE
 @shp.STContains(TAB.Shape) = 1;
カテゴリー: 開発 タグ: パーマリンク