PostgreSQL-组合查询
我有一个查询,我想与另一个查询合并,但没有成功 第一个查询返回表名为status的所有架构名称: 每个状态表中都有一列lastLogin,可按如下方式选择:PostgreSQL-组合查询,postgresql,select,Postgresql,Select,我有一个查询,我想与另一个查询合并,但没有成功 第一个查询返回表名为status的所有架构名称: 每个状态表中都有一列lastLogin,可按如下方式选择: select "lastLogin" from "someID".status where "lastLogin" is not null 如何从每个模式的所有状态表中获取lastLogin的所有值 提前感谢,Doobie您不能这样做,因为SQL查询中的模式名称必须是常量。您必须根据第一个查询的结果构造第二个查询 您可以做的是构
select "lastLogin"
from "someID".status
where "lastLogin" is not null
如何从每个模式的所有状态表中获取lastLogin的所有值
提前感谢,Doobie您不能这样做,因为SQL查询中的模式名称必须是常量。您必须根据第一个查询的结果构造第二个查询
您可以做的是构造第二个查询,以便它使用UNION在单个查询中查询所有名为status的表。对于方案数未知的一般问题,您无法创建单个查询。但是您可以为此创建一个存储过程。我假设lastLogin具有类型TIMESTAMP 自Postgres 9.5以来,内环可缩短为:
CREATE FUNCTION list_last_logins() RETURNS SETOF TIMESTAMP AS $$
DECLARE
the_row RECORD;
the_statement TEXT;
BEGIN
FOR the_row IN SELECT t.schema_name FROM information_schema.tables t WHERE t.table_name = 'status'
LOOP
the_statement := FORMAT('SELECT "lastLogin" FROM %s.status WHERE "lastLogin" IS NOT NULL', the_row.schema_name);
RETURN QUERY EXECUTE the_statement;
END LOOP;
RETURN;
END;
$_$ LANGUAGE plpgsql;
现在,您可以使用
SELECT * FROM list_last_logins();
感谢您的回答和专业知识,阿尔贝先生!
CREATE FUNCTION list_last_logins() RETURNS SETOF TIMESTAMP AS $$
DECLARE
the_row RECORD;
the_statement TEXT;
BEGIN
FOR the_row IN SELECT t.schema_name FROM information_schema.tables t WHERE t.table_name = 'status'
LOOP
the_statement := FORMAT('SELECT "lastLogin" FROM %s.status WHERE "lastLogin" IS NOT NULL', the_row.schema_name);
RETURN QUERY EXECUTE the_statement;
END LOOP;
RETURN;
END;
$_$ LANGUAGE plpgsql;
SELECT * FROM list_last_logins();