在Materialized View中使用union或union all导致PostgreSQL中的错误



我正在创建一个包含联合查询的物化视图,并收到以下错误:列"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中独立运行查询会运行良好,但使用相同的查询创建物化视图会引发上面列出的错误。

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

试着在你的真实代码中寻找这样的东西:

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

在本例中,如果列1来自表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

相关内容

  • 没有找到相关文章