我正在创建一个包含联合查询的物化视图,并收到以下错误:列"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