首页 > 解决方案 > 将两个表合并为一个物化视图

问题描述

我正在尝试将两个表 (POI) 组合到一个物化视图中,但它们没有相同的列。

例如:

表a:属性:名称、类型、geoloc、符号编号

表b:属性:名称、类型、info1、info2、geoloc

我在 SELECT 语句之间尝试了“JOIN”和“UNION ALL”,但它不起作用。有什么建议么?完美的解决方案是用 NULL 填充空列,例如表 a 没有“info1”。

这是原始代码:

DROP MATERIALIZED VIEW vt_views.poitest;

CREATE MATERIALIZED VIEW vt_views.poitest
TABLESPACE pg_default
AS
 SELECT tim_bergname.name,
 tim_bergname.info1 AS hoehe,
 tim_bergname.info2 AS region,
 tim_bergname.geoloc,
 tim_bergname.symbolnummer
 FROM tim_bergname

JOIN

SELECT tim_flurname.name,
 tim_flurname.geoloc,
 tim_flurname.symbolnummer
 FROM tim_flurname


WITH DATA;

ALTER TABLE vt_views.poitest
 OWNER TO postgres;

GRANT ALL ON TABLE vt_views.poi TO postgres;
GRANT ALL ON TABLE vt_views.poi TO PUBLIC;

谢谢

标签: postgresqljoinpostgisunion-all

解决方案


您需要UNION ALL,并且两个子选择必须具有相同数量和类型的列:

CREATE MATERIALIZED VIEW vt_views.poitest AS
   SELECT tim_bergname.name,
          tim_bergname.info1 AS hoehe,
          tim_bergname.info2 AS region,
          tim_bergname.geoloc,
          tim_bergname.symbolnummer
   FROM tim_bergname
UNION ALL
   SELECT tim_flurname.name,
          NULL,
          NULL,
          tim_flurname.geoloc,
          tim_flurname.symbolnummer
   FROM tim_flurname;

推荐阅读