如何计算具有相同列的多个表中的记录,其中where子句是pgsql

时间:2016-06-14 09:14:56

标签: php postgresql

我正在使用postgre sql和phpPgAdmin作为我的数据库。

我有一个表格,我在其中添加了一些表名,如:

table_lsts

id name tablename

11 abbc table1

22 xyyz table2

33 deef table3

现在在table1,table2,table3中我有多条记录,其中有一个名为vpvc_id的公共列。

我的问题是我必须编写一个查询,首先从table_lsts获取所有表名。

然后计算那些表中的记录,其中vpvc_id在(某些ID )等

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

尝试此功能:

CREATE OR REPLACE FUNCTION count_records (ids_lst character varying)
 RETURNS integer AS
$BODY$declare 
 query character varying;
 result integer;
 BEGIN 
   -- First query that create a dynamic query on all tables of table_lsts
    select into query 'select count(*) from (' || String_agg('select vpc_id from '||tablename,' UNION ALL ') || ') a where vpc_id in ('||ids_lst||')' from table_lsts ;
 ---execute dynamic query
 execute query  into result;
return result;
END;$BODY$
LANGUAGE plpgsql VOLATILE

并像这样使用它:

 select count_records('2,5')