在物化视图中使用并集或并集所有会导致PostgreSQL错误

时间:2018-11-28 18:59:03

标签: sql postgresql union-all materialized-views postgresql-10

我正在创建一个包含联合查询的实例化视图,并收到以下错误:列“ column1”被多次指定。

此错误的潜在原因是什么?

我该如何解决?

以下是我的代码的示例:

CREATE MATERIALIZED VIEW schema.view_name_mv
(
     "column1",
     "column2",
     "column3"
)
as 
select 
     tn1.column1, 
     tn1.column2,
     tn1.column3
from schema.table_name1 tn1,
     schema.table_name2 tn2
where tn1.column1 = tn2.column1
and   tn1.column2  = tn2.column2
union all 
select 
     tn1.column1, 
     tn1.column2, 
     tn1.column3
from schema.table_name1 tn1, 
     schema.table_name3 tn3
where tn1.column1 = tn3.column1
and   tn1.column2 = tn3.colum2;

注意:在PGAdmin 4中独立运行查询会运行良好,但是使用同一查询创建实例化视图将抛出上面列出的错误。

1 个答案:

答案 0 :(得分:0)

当您联接表时,如果两个列都具有相同的名称,而您没有指定哪个列属于每个表,则会发生此错误。我认为这些值column1,column2和column3是伪造的,并且它们充满了如下所示的sintax错误,我真的不知道在您的真实代码中是否忘记了重命名一列。

尝试在实际代码中寻找类似的内容:

select column1 from 
schema.table1 tn1, schema.table2 tn2 
where tn1.column1 = tn2.column2

在此示例中,如果 column1 来自表1或表2

,则未指定

此示例中的sintax错误:

CREATE MATERIALIZED VIEW schema.view_name_mv
(
     "column1",
     "column2",
     "column3", << remove this comma
)


union all 
select 
     tn1.colum1, << the name here is wrong, replace to column1
     tn1.colum2, << the name here is wrong, replace to column2
     tn1.column3