1つのselectステートメントとして実行できますが、パフォーマンスのために....ポリゴンの要点インデックスを調べてください。簡単にするために、ポリゴンフィールド(geomデータ型)とポイントフィールド(geomデータ型)を持つテーブルがあるとします。ポリゴンのリストでポイントのリストを作成している場合は、クロスジョインを実行して、各ポリゴンと各ポイントが比較されるようにします。
select *
from t1 inner join t2 on 1=1
where st_contains(t1.poly,t2.point) = 't'
(テーブル結合の例を含めるように変更されました。クロス結合を使用しています。つまり、すべてのポリゴンがすべてのポイントに結合されて比較されます。大規模なレコードセットについて話している場合は、それらのGISツリーインデックスを使用してください)
私は現在、数百のポリゴン内の数百万のポイントを見つけるためにこれを行っています。ポリゴンが重なっている場合、2つ以上のポリゴンにあるすべてのポイントに対して複数の行が返されます。
ポイントが保存されているデータタイプで保留に失敗する可能性があります。それらがgeomフィールドにある場合、それはうまく流れます。テキスト値を使用している場合は、st.geomfromtextステートメントを使用して文字をポイントに変換する必要があります。これは次のようになります。
st_contains(poly, st_geomfromtext('POINT('||lon||' ' ||lat ||')')) = 't'
lat / lonの例を使用しました...ここで注意するのは、geomfromtextで||を使用してポイントを作成する必要があることだけです。フィールドから文字列を作成します。st_geomfromtextの概念についてサポートが必要な場合はお知らせください。