sql >> Databáze >  >> RDS >> PostgreSQL

Jak sjednotit seznam tabulek načtených z jiné tabulky jediným dotazem?

Chcete-li to automatizovat, potřebujete dynamické SQL

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

Volejte:

SELECT * FROM f_multi_select();

Za předpokladu, že všechny tabulky sdílejí stejný typ řádku – můžeme tedy vybrat libovolnou a definovat návratový typ funkce.

Vložil jsem poddotaz s ORDER BY - v případě, že pořadí tabulek je smysluplné.

Související:



  1. Výpočet mediánu pomocí Mysql

  2. Jak aktualizovat ID v tabulce 2 z tabulky 1 v Oracle sql

  3. Volání uložené procedury Oracle z C#?

  4. Představujeme první platformu SaaS na světě, která bude poskytovat hloubkovou diagnostiku pro hybridní prostředí SQL Server