PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak UNION listę tabel pobranych z innej tabeli za pomocą jednego zapytania?

Aby to zautomatyzować, potrzebujesz dynamicznego 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$;

Zadzwoń:

SELECT * FROM f_multi_select();

Zakładając, że wszystkie tabele mają ten sam typ wiersza - więc możemy wybrać dowolny, aby zdefiniować typ zwracany funkcji.

Wrzuciłem podzapytanie z ORDER BY - w przypadku, gdy kolejność tabel ma znaczenie.

Powiązane:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie PostgreSQL działa wolno, gdy używasz NOT IN

  2. Jak wygenerować listę miesięcy w PostgreSQL?

  3. Jeden system bezpieczeństwa dla aplikacji, puli połączeń i PostgreSQL — przypadek LDAP

  4. Postgresql. UTWÓRZ CAST 'znak zmienny' na 'liczba całkowita'

  5. org.postgresql.util.PSQLException:BŁĄD:kolumna user0_.id nie istnieje - Hibernacja