在物化视图中使用 union 或 union all 导致 PostgreSQL 出错
Using a union or union all in Materialized View causing an Error in 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 中独立查询 运行 没问题,但使用相同的查询创建物化视图会抛出上面列出的错误。
当您加入 table 并且您没有指定哪个列属于每个 table 时,如果两个列具有相同的名称,就会发生此错误。我想这些值 column1、column2 和 column3 是假的,因为它们充满了语法错误,如下所示,我真的不知道在你的真实代码中你是否忘记重命名列。
尝试在你的真实代码中寻找这样的东西:
select column1 from
schema.table1 tn1, schema.table2 tn2
where tn1.column1 = tn2.column2
在此示例中,未指定 column1 是来自 table1 还是 table2
此示例中的语法错误:
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
我正在创建一个包含联合查询的物化视图,但出现以下错误:多次指定列 "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 中独立查询 运行 没问题,但使用相同的查询创建物化视图会抛出上面列出的错误。
当您加入 table 并且您没有指定哪个列属于每个 table 时,如果两个列具有相同的名称,就会发生此错误。我想这些值 column1、column2 和 column3 是假的,因为它们充满了语法错误,如下所示,我真的不知道在你的真实代码中你是否忘记重命名列。
尝试在你的真实代码中寻找这样的东西:
select column1 from
schema.table1 tn1, schema.table2 tn2
where tn1.column1 = tn2.column2
在此示例中,未指定 column1 是来自 table1 还是 table2
此示例中的语法错误:
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