7

在 PostgreSQL 8.4 中,我想从 3 个具有 id 的表中创建一个视图。所以我想在我看来有这个结构:

num serial,
name_dispatcher character varying(250)
the_geom geometry

我可以从表name_dispatcher中进行选择:the_geom

 CREATE VIEW lineView
      AS SELECT 'name' AS name_dispatcher, the_geom
      FROM line1
      UNION
      SELECT 'name' AS name_dispatcher, the_geom
      FROM line2
      UNION
      SELECT 'name' AS name_dispatcher, the_geom
      FROM line3

如何num在视图中创建列?

更新

我找到了一个解决方案:

ROW_NUMBER() OVER(ORDER BY lineView.voltage)

但我不知道如何在ALTER VIEW. 我怎么把它放在那里?

4

1 回答 1

12

您不能用于ALTER VIEW删除或添加列。我在 ALTER VIEW 上引用手册:

ALTER VIEW更改视图的各种辅助属性。(如果要修改视图的定义查询,请使用CREATE OR REPLACE VIEW。)

但一个简单的CREATE OR REPLACE VIEW不会削减它。手册中的另一句话

新查询必须生成与现有视图查询相同的列

所以DROPCREATE观点:

DROP VIEW lineview;

CREATE VIEW lineview AS
SELECT *, row_number() OVER(ORDER BY ???) AS num
FROM (
   SELECT 'name' AS name_dispatcher, the_geom
   FROM line1

   UNION
   SELECT 'name' AS name_dispatcher, the_geom
   FROM line2

   UNION
   SELECT 'name' AS name_dispatcher, the_geom
   FROM line3
   ) x

我使用子查询是因为我假设您要添加row_number()到所有行。你的问题在这方面很模糊。
如果您只想要一个没有特定顺序的唯一 ID,请使用row_number() OVER().

于 2013-01-18T08:30:37.803 回答