7

PostgreSQL 8.4では、IDを持つ3つのテーブルからビューを作成したいと思います。だから私は私の見解でこの構造を持ちたいです:

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列の削除または追加には使用できません。私はALTERVIEWのマニュアルを引用します:

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 に答える