是否有人可以帮助我使用以下功能进行查询:
让我们有一个简单的陈述,如:
SELECT relname FROM pg_catalog.pg_class WHERE relkind = 'r';
这将产生一个包含单个列的好结果 - 所有表的名称。
现在假设其中一个表名为" table1"。如果我们执行:
SELECT count(*) FROM table1;
我们将得到表格的行数" table1"。
现在真正的问题 - 这两个查询如何统一并拥有一个查询,从而得到两列的结果:表的名称和行数?用伪SQL编写它应该是这样的:
SELECT relname, (SELECT count(*) FROM relname::[as table name]) FROM pg_catalog.pg_class WHERE relkind = 'r';
以下是示例 - 如果数据库中有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能够做到这一点......
答案 0 :(得分:0)
使用PL / pgSQL(postgres SQL过程语言),您可以通过构建字符串然后将其作为SQL执行来执行dynamic queries。请注意,这是postgres特定的,但其他数据库可能具有相同的功能。更一般地说,如果您愿意超越SQL,可以使用任何编程语言(或shell / cmd脚本)来完成此任务。
顺便说一句,搜索“postgres dynamic query”会得到更好的结果,因为“嵌套选择”具有不同的含义。