【问题标题】:dynamic table query select动态表查询选择
【发布时间】:2019-09-06 17:36:20
【问题描述】:

大家好,我想创建一个动态表查询以在运行时更新。我有两个 postgis 表,一个包含点--tablename(records),一个包含多边形--tablename(OpDMA)。这个选择查询:

Create table Op_DMAConn as
SELECT pol.id as polygon_id, poi.id as point_id 
FROM "OpDMA" pol
LEFT JOIN records poi ON (ST_Intersects(poi.geom, pol.geom))

返回polygon_id 多边形和点的point_id。我希望这个查询在运行时执行!

【问题讨论】:

    标签: postgresql postgis


    【解决方案1】:

    我认为您正在寻找的是“执行”语句。 https://www.postgresql.org/docs/current/sql-execute.html

    例如,您可以这样做:

    CREATE OR REPLACE FUNCTION public.fn_pointer(points_table_name varchar, polygon_table_name varchar)
     returns  table(polygon_id int, point_id int)
    LANGUAGE plpgsql AS
    $$
    declare
        final_query varchar;
    begin
        query := 'SELECT ST_Contains(polygon.geom, point.geom)
        FROM public."'||points_table_name||'" point, public."'||polygon_table_name||'" polygon;'
    
        -- do what you have to do to make your query return you correct table
    
        return query execute final_query;
    end
    $$
    ;
    
    select fn_pointer('table_name_1','table_name_2');
    
    

    希望这会有所帮助。

    【讨论】:

    • 你能告诉我添加新点时它会做什么,是更新表格还是创建新表格?
    • 这段代码提供了什么:你需要的关键部分的不工作版本,即动态混合查询机制。在此代码中,没有在数据库中创建或更新任何内容。它只是一个将尝试返回的基本选择(并且由于函数的返回类型所需的等待列数而失败。
    • 我已经创建了一个表,其中包含我想要的结果,它返回多边形 id 和点 id,之前的选择查询只创建了点的 id,如果它在多边形内,则为 false 或 true .我将在问题中更新我的选择查询,你能帮我创建这个执行命令吗?
    • 您能否遵循这些准则:在我有时间正确回答您会很有帮助(不是那么多;))meta.stackoverflow.com/questions/271055/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多