sql >> Database >  >> RDS >> PostgreSQL

Hoe UNION een lijst met tabellen ophalen uit een andere tabel met een enkele query?

Om dit te automatiseren heb je dynamische SQL nodig

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

Bel:

SELECT * FROM f_multi_select();

Ervan uitgaande dat alle tabellen hetzelfde rijtype delen - dus we kunnen er een kiezen om het retourtype van de functie te definiëren.

Ik gooide een subquery in met ORDER BY - voor het geval de volgorde van de tabellen zinvol is.

Gerelateerd:



  1. MySQL vervangen door Percona op Plesk CentOS 7

  2. Hoe kan ik de twee queries natuurlijk samenvoegen met een clausule?

  3. Dynamische kolom in SELECT-instructie postgres

  4. Neem in PL/SQL een tabel als parameter, filter deze en retourneer deze