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

Hvordan UNION en liste over tabeller hentet fra en anden tabel med en enkelt forespørgsel?

For at automatisere dette har du brug for 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 til:

SELECT * FROM f_multi_select();

Forudsat at alle tabeller deler den samme rækketype - så vi kan vælge en hvilken som helst for at definere funktionens returtype.

Jeg sendte en underforespørgsel med ORDER BY - hvis rækkefølgen af ​​tabeller er meningsfuld.

Relateret:



  1. Oracle PLS-00363:udtryk '' kan ikke bruges som et tildelingsmål

  2. Hvordan bruger man den samme liste to gange i WHERE-klausulen?

  3. Sådan laver du Outer Join på>2 borde (Oracle)

  4. Få topresultater for hver gruppe (i Oracle)