sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur UNION en lista med tabeller hämtade från en annan tabell med en enda fråga?

För att automatisera detta behöver du dynamisk 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$;

Ring:

SELECT * FROM f_multi_select();

Förutsatt att alla tabeller delar samma radtyp - så vi kan välja vilken som helst för att definiera funktionens returtyp.

Jag skickade in en underfråga med ORDER BY - om tabellordningen är meningsfull.

Relaterat:



  1. Befolka flera bord i sails waterline orm

  2. mysql - INFOGA datumintervall i datumkolumner OM datum inte överlappar befintliga

  3. Hur söker man i flera kolumner med prioritet i MySQL?

  4. använder enctype=multipart/form-data med arabiska språk