PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment UNIONER une liste de tables extraites d'une autre table avec une seule requête ?

Pour automatiser cela, vous avez besoin de SQL dynamique

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$;

Appel :

SELECT * FROM f_multi_select();

En supposant que toutes les tables partagent le même type de ligne, nous pouvons donc en choisir une pour définir le type de retour de la fonction.

J'ai lancé une sous-requête avec ORDER BY - dans le cas où l'ordre des tables est significatif.

Connexe :