For-Schleife in SQL-Skript

Hallo,

ich erstelle eine Tabelle C mit der Geometrie aus der Verschneidung (ST_Intersection) von Tabelle A + B.
Das funktioniert soweit! Mein Code steht unten.
Das Problem ist aber, dass die Tabelle B verschiedene ids mit verschiedenen Geometrien besitzt. Im Moment wird in Tabelle C die Tabelle A mit Tabelle B.id=2 verschnitten.

Wie kann ich mir in einer Schleife alle Tabellen erzeugen? Beispielswiese Tabelle B.id besitzt 20 Zeilen (´B.id=20) und ich wil, dass er mir zu jeder neuen id eine neue Tabelle erzeugt (also insgesamt 20 Tabellen).

 CREATE TABLE tableC AS
     (SELECT eingangsdaten.*,
     ST_Intersection (A.geom, Bn.geom) as geom2
     FROM tableB, tableA
     JOIN test b
     ON ST_Intersects (A.geom, B.geom)
     WHERE B.id = 2);

alter table tableC drop column geom;
alter table tableC RENAME geom2 to geom;

ohne jetzt genau dein Problem verstanden zu haben, aber in einer Schleife N identische Tabellen zu erstellen ist Murks. Mache eine extra Spalte in Deiner Tabelle, die das Unterscheidungsmerkmal der 20 Tabellen enthält.

Ich will, dass ich nicht WHERE B.id = X angeben muss. Es soll durch alle B.id´s durchiterieren (B.id 1…bis Count(B.id)) und für jede B.id eine neue Tabelle erstellen. Die beinhalten dann jeweils unterschiedliche Geometrien

Du solltest Dir mal ein paar Artikel zum Thema Normalisierung durchlesen.

ACK.

Das wird an die Wand fahren. Tabellen anlegen um ein where zu vermeiden ist auf viele Weise Unsinn. Hör auf castorp und akretschmer.

Gruß Uwe

Ok ich muss diese Intersection in Postgis machen.
Ich will die einzelnen Tabellen dann letzendlich aus der DB als MapInfo-Format (mid/mif) speichern.

 CREATE TABLE moz_oin_oi2 AS
     (SELECT eingangsdaten.*,
     ST_Intersection (test.geom, eingangsdaten.geom) as geom2
     FROM test, eingangsdaten
     JOIN test b
     ON ST_Intersects (eingangsdaten.geom, b.geom)
     WHERE test.id = 1);
     alter table moz_oin_oi2 drop column geom;
     alter table moz_oin_oi2 RENAME geom2 to geom;
     
 CREATE TABLE reu_oin_oi2 AS
     (SELECT eingangsdaten.*,
     ST_Intersection (test.geom, eingangsdaten.geom) as geom2
     FROM test, eingangsdaten
     JOIN test b
     ON ST_Intersects (eingangsdaten.geom, b.geom)
     WHERE test.id = 2);
     alter table reu_oin_oi2 drop column geom;
     alter table reu_oin_oi2 RENAME geom2 to geom;
     
  CREATE TABLE gha_oat_oa3 AS
     (SELECT eingangsdaten.*,
     ST_Intersection (test.geom, eingangsdaten.geom) as geom2
     FROM test, eingangsdaten
     JOIN test b
     ON ST_Intersects (eingangsdaten.geom, b.geom)
     WHERE test.id = 3);
     alter table gha_oat_oa3 drop column geom;
     alter table gha_oat_oa3 RENAME geom2 to geom;

  CREATE TABLE nam_oat_oa3 AS
     (SELECT eingangsdaten.*,
     ST_Intersection (test.geom, eingangsdaten.geom) as geom2
     FROM test, eingangsdaten
     JOIN test b
     ON ST_Intersects (eingangsdaten.geom, b.geom)
     WHERE test.id = 4);
     alter table nam_oat_oa3 drop column geom;
     alter table nam_oat_oa3 RENAME geom2 to geom;

  CREATE TABLE ken_oin_oi2 AS
     (SELECT eingangsdaten.*,
     ST_Intersection (test.geom, eingangsdaten.geom) as geom2
     FROM test, eingangsdaten
     JOIN test b
     ON ST_Intersects (eingangsdaten.geom, b.geom)
     WHERE test.id = 6);
     alter table ken_oin_oi2 drop column geom;
     alter table ken_oin_oi2 RENAME geom2 to geom;

  CREATE TABLE som_oin_oi2 AS
     (SELECT eingangsdaten.*,
     ST_Intersection (test.geom, eingangsdaten.geom) as geom2
     FROM test, eingangsdaten
     JOIN test b
     ON ST_Intersects (eingangsdaten.geom, b.geom)
     WHERE test.id = 7);
     alter table som_oin_oi2 drop column geom;
     alter table som_oin_oi2 RENAME geom2 to geom;

Damit erstelle ich meine gewünschten Tabellen. Diese will ich aus der DB exportieren. Ich denke mal, dass ich das mit ogr2ogr machen muss ?