当前位置: 首页 > 面试题库 >

Postgres中的动态UNION ALL查询

子车青青
2023-03-14
问题内容

我们正在使用Postgres / PostGis连接来获取通过地理服务器发布的数据。

目前查询看起来像这样:

SELECT 
    row_number() over (ORDER BY a.ogc_fid) AS qid, a.wkb_geometry AS geometry
FROM
(
   SELECT * FROM test
   UNION ALL
   SELECT * FROM test1
   UNION ALL
   SELECT * FROM test2
)a

在我们的数据库中,仅将有效的shapefile导入每个表中,因此使UNION ALL零件动态化(遍历每个表并执行UNION
ALL语句)是有意义的。有没有一种方法可以以标准的Postgres方式执行?还是我需要编写一个函数,语法看起来如何?我对SQL很陌生。

shapefile具有不同的数据结构,只有ogc_fid列和wkb_geometry列始终可用,我们希望从数据库中合并所有表。


问题答案:

这只是一般性准则,您需要在细节(特别是语法)方面进行工作。

您需要创建一个存储过程

information_schema.tables为所需的表名创建一个循环检查过滤器

DECLARE    
    rec record;
    strSQL text;
BEGIN

然后为每个表创建一个strSQL

 FOR rec IN SELECT table_schema, table_name
            FROM information_schema.tables                
 LOOP
     strSQL := strSQL || 'SELECT ogc_fid, wkb_geometry FROM ' || 
               rec.table_schema || '.' || rec.table_name || ' UNION ';
 END LOOP;

-- have to remove the last ' UNION ' from strSQL

strSQL := 'SELECT  row_number() over (ORDER BY a.ogc_fid) AS qid,
         a.wkb_geometry AS geometry FROM (' || strSQL || ')';

EXECUTE strSQL;


 类似资料:
  • 我有一个这样的SQL问题 根据用户输入,我想将botcode='r1'更改为给定输入。在不重新启动作业的情况下说出botcode='r10'。有没有办法做到这一点。我在flink 1.7上使用stream env。我尝试配置流来读取输入。但仍停留在如何动态更改查询上。有人能帮我吗?提前谢谢

  • 问题内容: 我正在寻找一种使用Spring Data JPA动态构建查询的解决方案。我有一个GameController,它有一个RESTful服务终结点/ games,它带有4个可选参数:体裁,平台,年份,标题。可能不传递任何API,而是传递所有4种,以及之间的每种组合。如果未传递任何参数,则默认为null。我需要在存储库中使用一种方法来构建适当的查询,并且理想情况下还允许Spring Data

  • 问题内容: 我正在与后端的Mongodb一起开发nodejs / express应用程序。在我的一个API调用中,根据是否存在特定的querystring参数,我想使用$ gt或$ lt向Mongodb发出查询。 在某些情况下,我们想要的所有内容都比使用$ lt少,但在其他情况下,我们希望所有的内容都比使用$ lt大。我们如何做到这一点而不重复查询? 这是一个示例查询: 有没有一种方法可以动态创建

  • 我正在尝试创建一个简单的Spring项目,餐厅可以在共享数据库中添加菜单项,用户可以使用html表单根据一系列标准搜索菜肴,尤其是饮食要求 表格示例: 示例SQL命令 然后,符合他们标准的菜肴列表将返回给用户。 表单中的任何字段都可以留空,不勾选框(例如,“素食主义者”并不意味着条件应设置为“假”,而是不包括在查询中)。因此,处理该问题的最佳方法似乎是使用JpaSpecificationExecu

  • 问题内容: 我有一个数据库字段名称调用,我正在尝试使用如下所示的变量名称来选择它: 显然,SQL将解释为字符串,而不是数据库的字段,我如何以这种方式将其识别为字段名而不是字符串,可能没有任何select或if语句。 问题答案: 试试这个: 您必须组成一个动态查询,并使用 要在事物的“动态”方面添加更多内容,请使用存储过程。请参见此处的示例: http://www.marten-online.com