【发布时间】:2022-01-22 00:53:59
【问题描述】:
我在同一架构中有 100 个具有相同结构的表。我想运行查询以查看“sqft”列为 NULL 的所有行
SELECT * FROM table WHERE sqft = NULL
我要遍历的所有表都以前缀“tb_”开头
例如'tb_115_spooner_st'
在尝试了此处发布的众多解决方案后,我无法使用单个脚本正确迭代所有这些表。
这就是我目前正在使用的东西
do $$
declare
rec record;
query text;
begin
for rec in select * from pg_tables where schemaname = 'public'
loop
query = format('SELECT * FROM %s WHERE sqft = NULL LIMIT 1', rec.tablename);
--raise notice '%', query;
execute query;
end loop;
end
$$ language plpgsql;
我对编写像这样更复杂的 SQL 命令还很陌生,并且很难理解出了什么问题。我知道需要有一个前缀是条件的部分,但现在运行的代码只是在控制台中返回一个“DO”。任何帮助表示赞赏。
【问题讨论】:
-
在第一个查询中将
=更改为IS,如SELECT * FROM table WHERE sqft is NULL。请记住,null 不是值。 -
为什么有这么多非常相似的表?
-
看起来很奇怪的设计。我会考虑为所有建筑物提供一张公共桌子。
-
我同意 jarlh。您应该只使用一个表。如果总大小真的很大(数亿行),那么可以考虑通过构建进行分区
-
一个 DO 块不能返回任何东西。您将不得不编写一个(设置返回)函数
标签: sql postgresql