Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

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

Dieses Thema im Forum "Oracle" wurde erstellt von wand1s, 31 Juli 2013.

  1. wand1s

    wand1s Neuer Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. wand1s

    wand1s Neuer Benutzer

    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
     
  4. wand1s

    wand1s Neuer Benutzer

    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden