Mehrere sql abfragen zusammenfügen (spalten anhängen)

wand1s

Neuer Benutzer
Beiträge
3
Hallo,

ich habe folgendes problem.

Ich habe 4 unabhängige sql abfragen, die ich nun zusammenfügen möchte. 3 davon bestehen nur aus einer spalte, die vierte hat mehr spalten. Alle haben dieselbe zeilenanzahl.

Was ich nun möchte, ist dass die drei einzelnen spalten ganz rechts der vierten abfrage stehen.

Alle abfragen sind gleichermaßen sortiert, dh es besteht kein problem, wenn die spalten einfach rechts angehängt werden.

Ich will mir damit daten aus einer datenbank holen, um sie weiter verarbeiten zu können. Dazu müssen diese aber in der oben beschriebenen form vorliegen.


Das ganze sieht etwa so aus:

Abfrage1:

Sp1 sp2 sp3 sp4
1 a 3 c
1 b 5 d
2 c 4 a

Abfrage2 (analog für die beiden anderen einspaltenabfragen):

Sp5
1
2
3

Ziel:

Sp1 sp2 sp3 sp4 Sp5
1 a 3 c 1
1 b 5 d 2
2 c 4 a 3


Sp1 beinhaltet die ID der produkte, wohingegen die restlichen spalten weitere eigenschaften des produktes beinhalten.

Wenn es die lösung vereinfachen würde, kann ich bei den einspaltenabfragen vorne noch eine spalte hinzufügen, in der zeilenweise dieselbe ID steht wie in der Sp1 der Abfrage1.

Vielen dank für eure hilfe

lg
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.851
Hallo,

ich habe folgendes problem.

Ich habe 4 unabhängige sql abfragen, die ich nun zusammenfügen möchte. 3 davon bestehen nur aus einer spalte, die vierte hat mehr spalten. Alle haben dieselbe zeilenanzahl.

Was ich nun möchte, ist dass die drei einzelnen spalten ganz rechts der vierten abfrage stehen.

Alle abfragen sind gleichermaßen sortiert, dh es besteht kein problem, wenn die spalten einfach rechts angehängt werden.

Ich will mir damit daten aus einer datenbank holen, um sie weiter verarbeiten zu können. Dazu müssen diese aber in der oben beschriebenen form vorliegen.


Das ganze sieht etwa so aus:

Abfrage1:

Sp1 sp2 sp3 sp4
1 a 3 c
1 b 5 d
2 c 4 a

Abfrage2 (analog für die beiden anderen einspaltenabfragen):

Sp5
1
2
3

Ziel:

Sp1 sp2 sp3 sp4 Sp5
1 a 3 c 1
1 b 5 d 2
2 c 4 a 3


Sp1 beinhaltet die ID der produkte, wohingegen die restlichen spalten weitere eigenschaften des produktes beinhalten.

Wenn es die lösung vereinfachen würde, kann ich bei den einspaltenabfragen vorne noch eine spalte hinzufügen, in der zeilenweise dieselbe ID steht wie in der Sp1 der Abfrage1.

Vielen dank für eure hilfe

lg

Da sehe ich so einige Probleme. Datenbanken arbeiten mit Mengen, welche per se erst einmal unsortiert sind. Du hast mehrere unabhängige Abfragen, die Dir faktisch Tabellen liefern. Man kann die natürlich mit JOIN nebeneinander bringen - aber dann brauchst Du definierte JOIN-Condtions. Die sehe ich bis jetzt nicht. Die Idee mit derselben Spalte ist aber ein guter Ansatz, nur muß dieser eindeutige Werte liefern. Du hast aber 2 mal die 1 in der ersten Spalte.

Code:
test=*# select * from a1;
 sp1 | sp2 | sp3 | sp4
-----+-----+-----+-----
 1   | a   | 3   | 3
 1   | b   | 5   | d
 2   | c   | 4   | a
(3 rows)

test=*# select * from a2;
 sp5
-----
 1
 2
 3
(3 rows)

test=*# select x1.sp1, x1.sp2, x1.sp3, x1.sp4, x2.sp5 from (select *, row_number() over (order by sp1, sp2, sp3, sp4) r from a1) x1 left join (select sp5, row_number() over (order by sp5) r from a2) x2 on (x1.r=x2.r);
 sp1 | sp2 | sp3 | sp4 | sp5
-----+-----+-----+-----+-----
 1   | a   | 3   | 3   | 1
 1   | b   | 5   | d   | 2
 2   | c   | 4   | a   | 3
(3 rows)


Das kann jetzt aber Zufall sein, daß das wie von Dir gewünscht funktioniert, weil zufällig(?) die Tabellen von Dir exakt so sortiert sind.

Hint: bitte verwende Code-Tags, sieht besser aus und ist besser lesbar.
 

wand1s

Neuer Benutzer
Beiträge
3
Hallo,
danke schonmal, werde ich morgen gleich probieren.

falls das noch was hilft, in der ersten spalte sind eindeutige! IDs, sprich es kommt kein eintrag zweimal vor. das war dumm von mir hier zweimal 1 zu verwenden.

die werte in meinen spalten sind hier rein fiktiv, die buchstaben sollten darstellen, dass char vorkommen, und die zahlen, dass numerische werte vorkommen.

lg
 
Werbung:

wand1s

Neuer Benutzer
Beiträge
3
hallo,
ich glaube ich habe mein problem lösen können. hier mein sql code:

select
a1.sp1,
a1.sp2,
a1.sp3,
a1.sp4,
a1.sp5,
a2.sp6

from
tabelle1 a1,
tabelle2 a2

where (beliebig wählbar)
a1.sp1 = ...
a2.sp6 =...
;
lg
 
Oben