次のような定義を持つテーブルを返す PL/pgSQL 関数があります。
CREATE OR REPLACE FUNCTION get_movement_aggregation(movement_table varchar,place_table varchar,geom varchar,point_gid varchar, radius numeric DEFAULT 20000, inArea geometry DEFAULT NULL)
RETURNS TABLE(place_i integer) AS
-- actual code here
inArea
ここで、別のテーブルから取得したジオメトリ (パラメーター) を使用して、この関数を使用したいと思います。次のクエリを試すと:
WITH x AS (
SELECT wkb_geometry from tha_adm1
WHERE name_1 = 'Ubon Ratchathani' LIMIT 1
)
SELECT g.*
FROM x,
get_movement_aggregation('movements','places','geom','place_id',14000,x.wkb_geometry)
次のエラーが表示されます。
ERROR: function expression in FROM cannot refer to other relations of same query level
私が実際に条項x
の両方の部分で言及しているので、それは理にかなっています。FROM
サブクエリは次を返します。
+----------------------------------+
| | wkb_geometry |
| | geometry(MultiPolygon,4326) |
+---+------------------------------+
| 1 | some very long number here |
+---+------------------------------+
そして、このパラメーターを使用して、関数で作業しているレコードのリストをフィルター処理します。1 つの解決策は、フィルター処理されたレコードを使用して一時テーブルを作成し、関数にフィードすることですが、サブクエリでそれを行う方法があれば、それは素晴らしいことです。
ご回答ありがとうございます。