loop erstellen

FabianE

Neuer Benutzer
Beiträge
4
Hallo zusammen,

Ich würde gerne einen Loop erstellen, der für jeden Eintrag in der Tabelle BSPTAB1 folgende Befehle für Tabelle BSPTAB2 ausführt:

insert into BSPTAB2(BSPTAB2_ID,BSPTAB2_BSPTAB1_ID,BSPTAB2_POSITION) values (BSPTAB2_SEQ.nextval,BSPTAB1_ID,1);
insert into BSPTAB2(BSPTAB2_ID,BSPTAB2_BSPTAB1_ID,BSPTAB2_POSITION) values (BSPTAB2_SEQ.nextval,BSPTAB1_ID,2);
insert into BSPTAB2(BSPTAB2_ID,BSPTAB2_BSPTAB1_ID,BSPTAB2_POSITION) values (BSPTAB2_SEQ.nextval,BSPTAB1_ID,3);
insert into BSPTAB2(BSPTAB2_ID,BSPTAB2_BSPTAB1_ID,BSPTAB2_POSITION) values (BSPTAB2_SEQ.nextval,BSPTAB1_ID,11);
insert into BSPTAB2(BSPTAB2_ID,BSPTAB2_BSPTAB1_ID,BSPTAB2_POSITION) values (BSPTAB2_SEQ.nextval,BSPTAB1_ID,12);
insert into BSPTAB2(BSPTAB2_ID,BSPTAB2_BSPTAB1_ID,BSPTAB2_POSITION) values (BSPTAB2_SEQ.nextval,BSPTAB1_ID,13);


Ich bin dankbar für jede Hilfe und bedanke mich im voraus.

Viele Grüsse
Fabian
 
Werbung:
ich denke, Du suchst einen LATERAL JOIN. Im folgenden ein Beispiel, bei dem je Zeile in der Tabelle loop die Anzahl count diese Zeile wiederholt wird:

Code:
test=*# select * from loop;
 id | count |  val  
----+-------+-------
  1 |     3 | text1
  2 |     5 | text2
  3 |     2 | text3
(3 Zeilen)

test=*# select * from loop left join lateral (select * from generate_series(1, loop.count)) l on true;
 id | count |  val  | generate_series
----+-------+-------+-----------------
  1 |     3 | text1 |               1
  1 |     3 | text1 |               2
  1 |     3 | text1 |               3
  2 |     5 | text2 |               1
  2 |     5 | text2 |               2
  2 |     5 | text2 |               3
  2 |     5 | text2 |               4
  2 |     5 | text2 |               5
  3 |     2 | text3 |               1
  3 |     2 | text3 |               2
(10 Zeilen)

test=*#

Oder habe ich Dein Anliegen falsch verstanden? Kannst Du ein einfaches beispiel zeigen, was Du suchst?
 
oder suchst Du eher sowas? :

Code:
test=*# select * from loop;
 id | count |  val  
----+-------+-------
  1 |     3 | text1
  2 |     5 | text2
  3 |     2 | text3
(3 Zeilen)

test=*# create table ziel(seq serial, id int, id2 int);
CREATE TABLE
test=*# with x as (select id, 1 from loop union all select id, 2 from loop union all select id, 3 from loop) insert into ziel (id, id2) select * from x;
INSERT 0 9
test=*# select * from ziel;
 seq | id | id2
-----+----+-----
   1 |  1 |   1
   2 |  2 |   1
   3 |  3 |   1
   4 |  1 |   2
   5 |  2 |   2
   6 |  3 |   2
   7 |  1 |   3
   8 |  2 |   3
   9 |  3 |   3
(9 Zeilen)

test=*#
 
Hallo akretschmer

vielen Dank für Deine rasche Antwort.
Also eigentlich sollten pro Eintrag in der BSPTAB1, 6 Einträge in der BSPTAB2 entstehen. Diese 6 Einträge sollen in der ersten Spalte eine ID erhalten, in der 2. Spalte die ID des Eintrages der BSPTAB1 und in der 3. Spalte für jeden Eintrag die Zahl 1,2,3,11,12,13 ...

Lieber Gruss
Fabian
 
Werbung:
Zurück
Oben