PostgreSQL - 结合选择

时间:2018-02-07 10:32:51

标签: postgresql select schema

我有一个存储多个模式的数据库,其中包含表格

我想获取每个模式名称,同时检查模式是否有一个名为“status”的表

我有两个问题:

此查询返回数据库的所有模式:

select schema_name from information_schema.schemata

使用返回的查询,然后检查每个模式,如果表'status'存在:

select exists(select * from information_schema.tables where table_schema = 'the_schema_name' and table_name = 'status')

我现在的问题是,我是否可以将这两个查询合并为一个?

提前致谢 Doobie

1 个答案:

答案 0 :(得分:0)

使用共同相关的子查询:

select s.schema_name, 
       exists (select * 
               from information_schema.tables t
               where t.table_schema = s.schema_name
                 and t.table_name = 'status') as status_exists
from information_schema.schemata s;

如果您只想查找表不存在的模式,可以使用以下查询执行此操作:

select s.schema_name
from information_schema.schemata s
where not exists (select *
                  from information_schema.table t
                  where t.schema_name = s.schema_name
                    and t.table_name = 'status');