PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come UNION un elenco di tabelle recuperate da un'altra tabella con una singola query?

Per automatizzare questo, hai bisogno di SQL dinamico

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

Chiama:

SELECT * FROM f_multi_select();

Supponendo che tutte le tabelle condividano lo stesso tipo di riga, quindi possiamo sceglierne una qualsiasi per definire il tipo di ritorno della funzione.

Ho inserito una sottoquery con ORDER BY - nel caso in cui l'ordine delle tabelle sia significativo.

Correlati: