我在PostgreSQL数据库中有一个大型查询。查询是这样的:
SELECT * FROM table1, table2, ... WHERE table1.id = table2.id...
当我将此查询作为sql查询运行时,它将返回所需的行。
但是,当我尝试使用相同的查询创建视图时,它返回错误:
“错误:列“ id”已多次指定。”
(我在执行查询时使用pgAdminIII。)
我猜会发生这种情况,因为结果集将包含一个以上的名为“ id”的列。是否有某种方法可以解决此问题,而无需在查询中编写所有列名?
之所以会发生这种情况,是因为选择*,一个视图将具有两个名为列的id列,一个来自表1,另一个来自表2。
您需要指定要在视图中使用的ID。
SELECT table1.id, column2, column3, ... FROM table1, table2 WHERE table1.id = table2.id
该查询之所以有效,是因为它可以具有同名的列…
postgres=# select 1 as a, 2 as a; a | a ---+--- 1 | 2 (1 row) postgres=# create view foobar as select 1 as a, 2 as a; ERROR: column "a" duplicated postgres=# create view foobar as select 1 as a, 2 as b; CREATE VIEW