ST_Within は 2 つの図形オブジェクトを引き数とし、最初のオブジェクトが 2 番目のオブジェクトの内部に完全に含まれていれば 1 (TRUE) を戻します。そうでなければ 0 (FALSE) を戻します。
構文
db2gse.ST_Within(g1 db2gse.ST_Geometry, g2 db2gse.ST_Geometry)
戻りタイプ
整数
例
以下の例では、2 つの表が作成されます。 1 つ目の表 BUILDINGFOOTPRINTS には都市内の建物のフットプリントが含まれています。 2 つ目の表 LOTS にはその建物の敷地が含まれています。都市計画担当者が、すべての建物のフットプリントが完全に敷地内に収まっていることを確かめたいとします。
どちらの表でも、複数ポリゴンのデータ・タイプに建物のフットプリントの図形と敷地の図形が格納されています。データベース設計担当者は、両方の図形について複数ポリゴンを選択しました。これは河川のような、地形によって敷地が分断されている場合があるため、また建物のフットプリントが複数の建物から構成されている場合があるためです。
CREATE TABLE BUILDINGFOOTPRINTS ( building_id integer, lot_id integer, footprint db2gse.ST_MultiPolygon); CREATE TABLE LOTS ( lot_id integer, lot db2gse.ST_MultiPolygon );
都市計画の担当者は、以下の SELECT ステートメントを使用して、 1 つの敷地に完全には収まっていない建物を最初に選びます。
SELECT building_id FROM BUILDINGFOOTPRINTS, LOTS WHERE db2gse.ST_Within(footprint,lot) <> 1;
最初の照会で敷地ポリゴンの外側にフットプリントのあるすべての BUILDING_ID がリストされるものの、残りの BUILDING_ID に lot_id が正しく割り当てられているかどうかは分かりません。以下に示す 2 番目の SELECT ステートメントは、 BUILDINGFOOTPRINTS 表の lot_id 列に対して、データ保全性の検査を実行します。
SELECT bf.building_id "building id", bf.lot_id "buildings lot_id", LOTS.lot_id "LOTS lot_id" FROM BUILDINGFOOTPRINTS bf, LOTS WHERE db2gse.ST_Within(footprint,lot) = 1 AND LOTS.lot_id <> bf.lot_id;