Postgresql - Как выбрать несколько таблиц по конкретным столбцам и добавить их - PullRequest
0 голосов
/ 01 мая 2018

Я хотел бы выбрать количество таблиц, выбрать столбцы геометрии (geom) и Имя в каждой из таблиц и добавить их под собой. Я дошел до выбора таблиц и их столбцов, как показано ниже:

SELECT TABLE_NAME COLUMN_NAME
FROM INFORMATION_SCHEMA.columns
WHERE (TABLE_NAME LIKE '%HESA' OR 
      TABLE_NAME LIKE '%HEWH') AND 
      (COLUMN_NAME = 'geom' AND
       COLUMN_NAME = 'Name');

Как вы тогда берете столы:

id | geom  | Name  |  id | geom  | Name  |
____________________  ____________________
1  | geom1 | Name1 |  1  | geom4 | Name4 |
2  | geom2 | Name2 |  2  | geom5 | Name5 |
3  | geom3 | Name3 |  3  | geom6 | Name6 |

И добавьте вторую таблицу ниже первой, например:

id | geom  | Name  |
____________________
1  | geom1 | Name1 |
2  | geom2 | Name2 |
3  | geom3 | Name3 |
1  | geom4 | Name4 |
2  | geom5 | Name5 |
3  | geom6 | Name6 |

Я использую UNION ALL или что-то еще?

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

https://www.db -fiddle.com / ж / 75fgQMEWf9LvPj4xYMGWvA / 0

на основе данных вашего образца:

do
'
declare
 r record;
begin
 for r in (
SELECT a.TABLE_NAME
FROM INFORMATION_SCHEMA.columns a
JOIN INFORMATION_SCHEMA.columns b on a.TABLE_NAME = b.TABLE_NAME and a.COLUMN_NAME = ''geom'' and b.COLUMN_NAME = ''name''
WHERE (a.TABLE_NAME LIKE ''oranges%'' OR a.TABLE_NAME LIKE ''%_db'') 
 ) loop
    execute format(''insert into rslt select geom, name from %I'',r.table_name);
 end loop;
end;
'
;
0 голосов
/ 01 мая 2018

Union All отлично справится со своей задачей:

SELECT
  *
FROM (
  (SELECT * FROM table_one)
  UNION ALL
  (SELECT * FROM table_two)
) AS tmp
ORDER BY name ASC;

Я добавил внешний SELECT, чтобы показать вам, как вы можете заказать весь результат.

DB Fiddle можно найти здесь

...