Postgresql - 如何按特定列选择多个表并附加它们

时间:2018-05-01 11:52:23

标签: postgresql select append

我想选择多个表,并在每个表中选择几何(geom)和Name列,并在彼此下方追加。我已经选择了表格及其列,如下所示:

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 :(得分:1)

Union All将完成这项工作:

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

我添加了外部SELECT,以向您展示如何订购整个结果。

可以找到DB Fiddle here

答案 1 :(得分:1)

https://www.db-fiddle.com/f/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;
'
;