PostgreSQL嵌套选择

时间:2016-06-19 14:50:00

标签: postgresql select nested

是否有人可以帮助我使用以下功能进行查询:

  1. 让我们有一个简单的陈述,如:

    SELECT relname FROM pg_catalog.pg_class WHERE relkind = 'r';
    

    这将产生一个包含单个列的好结果 - 所有表的名称。

  2. 现在假设其中一个表名为" table1"。如果我们执行:

    SELECT count(*) FROM table1;
    

    我们将得到表格的行数" table1"。

  3. 现在真正的问题 - 这两个查询如何统一并拥有一个查询,从而得到两列的结果:表的名称和行数?用伪SQL编写它应该是这样的:

    SELECT relname, (SELECT count(*) FROM relname::[as table name]) FROM pg_catalog.pg_class WHERE relkind = 'r';
    
  4. 以下是示例 - 如果数据库中有3个表,名称为table1,table2和表3,并且它们分别有20,30和40行,则查询结果应如下所示:

     -------------
    |relname| rows|
    |-------------|
    |table1 |   20|
    |-------------|
    |table2 |   30|
    |-------------|
    |table3 |   40|
     -------------
    

    感谢所有愿意提供帮助的人; - )

    P.S。是的我知道表名不是模式限定的;-)我们希望数据库中的所有表都有唯一的名称; - )

    (纠正上次查询中从重命名到重命名的拼写错误)

    EDIT1 :问题与&#34无关;如何找到表格中的行数"。我要问的是:如何使用2个选择构建查询,第二个从第一个选择的结果中获取FROM列的值。

    EDIT2 :正如@jdigital所建议我尝试了动态查询并完成了这项工作,但只能在PL / pgSQL中使用。所以它不适合我的需要。另外,我尝试使用PREPARE和EXECUTE语句 - 但它再次无效。无论如何 - 我会坚持使用两种查询方法。但我确定PostgreSQL能够做到这一点......

1 个答案:

答案 0 :(得分:0)

使用PL / pgSQL(postgres SQL过程语言),您可以通过构建字符串然后将其作为SQL执行来执行dynamic queries。请注意,这是postgres特定的,但其他数据库可能具有相同的功能。更一般地说,如果您愿意超越SQL,可以使用任何编程语言(或shell / cmd脚本)来完成此任务。

顺便说一句,搜索“postgres dynamic query”会得到更好的结果,因为“嵌套选择”具有不同的含义。