PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да UNION списък от таблици, извлечени от друга таблица с една заявка?

За да автоматизирате това, имате нужда от динамичен 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$;

Обаждане:

SELECT * FROM f_multi_select();

Ако приемем, че всички таблици споделят един и същ тип ред - така че можем да изберем всеки, за да дефинираме типа на връщане на функцията.

Пуснах подзаявка с ORDER BY - в случай, че редът на таблиците е смислен.

Свързани:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изчистите и преинсталирате postgresql на ubuntu?

  2. Връщане на редове от INSERT с ON CONFLICT без необходимост от актуализиране

  3. Съхраняване на изображение в postgresql

  4. Регистриране на тригери в postgres 9.1

  5. PHPUnit:Как да тествам взаимодействия с база данни на отдалечен сървър на Postgres?