PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie verbinde ich eine Liste von Tabellen, die aus einer anderen Tabelle mit einer einzigen Abfrage abgerufen wurden?

Um dies zu automatisieren, benötigen Sie dynamisches 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$;

Aufruf:

SELECT * FROM f_multi_select();

Unter der Annahme, dass alle Tabellen den gleichen Zeilentyp haben, können wir jeden auswählen, um den Rückgabetyp der Funktion zu definieren.

Ich habe eine Unterabfrage mit ORDER BY eingefügt - falls die Reihenfolge der Tabellen sinnvoll ist.

Verwandte: