对多个表执行查询

时间:2019-08-05 11:16:20

标签: sql postgresql automation postgis

我需要将以下查询应用于60多个表:

UPDATE variable_table_name ab
SET    elem_nr = ef.elem_nr
FROM   ga_mit_elemnr ef
WHERE  (ab.elem_nr NOT IN
              (SELECT elem_nr
               FROM   strassenelemente cd)
       OR     ab.elem_nr IS NULL)
AND    St_within(ab.geom, ef.geom) 

在PostgreSQL中是否有一种自动化的方法?

3 个答案:

答案 0 :(得分:0)

据我所知,不可能在Plain SQL中执行此操作,但是您可以使用PL / pgSQL在for循环中以动态命令的形式执行查询,并针对60多个表运行此查询。您可以在此处阅读有关Pl / pgSQL的信息:https://www.postgresql.org/docs/9.6/plpgsql.html

根据您的要求,您还可以使用其他编程语言(例如Python)以字符串形式动态执行SQL语句。

答案 1 :(得分:0)

了解此情况后,我建议使用postgres分区机制

即有一个主表和60多个分区,每个分区都将附加到主表,在ALTER TABLE上,您仅更改主表架构,其余所有表也将更新

答案 2 :(得分:0)

这样的事情..

DECLARE @sql NVARCHAR(max)

SELECT @sql = N' '+ String_agg(Concat(N'
UPDATE ', CONVERT(NVARCHAR(max), Quotename(col_table_name)), N'
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];'), N'' + CHAR(13) +  CHAR(13))  
FROM   information_schema.tables
WHERE  [condition]

EXEC (@sql) 

一旦获得查询,就可以使用SELECT语句检查查询。

SELECT (@sql)

如果查询正常,则可以执行查询。

EXEC (@sql) 

示例:https://data.stackexchange.com/stackoverflow/query/1011376/