sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo UNIR una lista de tablas recuperadas de otra tabla con una sola consulta?

Para automatizar esto, necesita SQL dinámico

CREATE OR REPLACE FUNCTION f_multi_select()
  RETURNS SETOF table1
  LANGUAGE plpgsql AS
$func$
BEGIN
   RETURN QUERY EXECUTE
   (
   SELECT string_agg(format('SELECT * FROM %I', tbl), ' UNION ALL ')
   FROM   (SELECT tbl FROM tablenames ORDER BY id) sub
   );
END
$func$;

Llamar:

SELECT * FROM f_multi_select();

Suponiendo que todas las tablas comparten el mismo tipo de fila, podemos elegir cualquiera para definir el tipo de retorno de la función.

Lancé una subconsulta con ORDER BY - en caso de que el orden de las tablas sea significativo.

Relacionado: