2017-02-09 25 views
0

私のデータベースには2つのテーブル(A、B)があります。 ここでは、テーブルBと同じ列からの新しいテーブルCを作成します。新しいテーブルCのジオメトリがテーブルAの内部にあるテーブルBのすべてのデータを書きたいと思います。別のテーブルからテーブルを作成する

CREATE TABLE "C" (ID2 serial PRIMARY KEY, "geom" geometry, "id" bigint, "Name" varchar, "Feature" int, "ID2" bigint, "Code_1" varchar, "Wert_1" varchar, "Code_2" varchar, "Wert_2" int); 

INSERT INTO C (geom) 

SELECT ST_Intersection (A.geom, B.geom) 

From A, B 

結果が交差した後のジオメトリを持つテーブルです:のような

何か。 はさらに、私はその後(ID、名前...)

+2

'CREATE TABLE tableC as SELECT ....' –

答えて

1

ブール関数を使用しST_Intersects

CREATE TABLE tableC AS 
     SELECT tableB.*, -- (all field less geom) 
      ST_Intersection (A.geom, B.geom) as geom -- generate geom 
     FROM tableA 
     JOIN tableB 
     ON ST_Intersects (A.geom, B.geom) -- boolean function 

あなたは、インデックスを作成し、PKやFKのような制約する必要が覚えてあまりにも残りのデータを必要とします。

+0

これは機能していません(エラーメッセージ)。Join/On後に型がブール値でなければならず、幾何学を持っています。 – Moehre

+0

これはクエリです。 ALLを含むeingangsdaten); INSERT INTO C SELECTのB *表B からではないST_IsEmpty(ST_Intersection(a.geom、b.geom)) a.id = 2 ONテーブルaを登録しよう; 'しかし、結果が正しい – Moehre

+0

ないだからあなたがしたいです交差点を挿入しますか? –

2

別のオプションは次のとおりです。あなたのためのすべてのインデックスとキーを作成します

CREATE TABLE tableC (LIKE tableB INCLUDING ALL); 
INSERT INTO tableC 
SELECT b.* FROM tableB b 
    JOIN tableA ON NOT ST_IsEmpty(ST_Intersection (A.geom, B.geom)); 

+0

素敵な、didntのは1つが、 –

+0

'LIKE ... ALL'含むインデックスがあまりにINHERITS''で伝播されないという事実の周りに良い方法であることを。知っていました –

+0

エラーメッセージの引数Join/ONは型booleanであり、ジオメトリでなければなりません。どうすればこの問題を解決できますか? – Moehre

関連する問題