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

Tabellen vereinen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von andyfis, 22 Januar 2013.

  1. andyfis

    andyfis Benutzer

    Hallo,
    ich habe folgendes Problem und weiß einfach nicht mehr, nach was ich noch suchen soll. Alle Versuche führen bisher immer zu dem falschen Ergebnis.
    Wäre schön, wenn mir jemand etwas auf die Sprünge helfen kann.

    Anbei mal mein Problem in einfacher Art.

    Tabelle1
    Projekt ProjLeiter ProjMitarb
    ------------------------------------
    1 1 2
    2 2 2
    3 NULL 3
    4 4 1

    Tabelle 2
    MitarbID Name
    -----------------------
    1 Klaus
    2 Peter
    3 Hans
    4 Stefan

    Gewünschtes Ergebnis

    Projekt ProjLeiter ProjMitarb
    ------------------------------------
    1 KLAUS PETER
    2 PETER PETER
    3 NULL HANS
    4 Stefan KLAUS


    Also den Projectleiter bekomme ich hin, aber bei dem ProjMitarbeiter Versuchen kommen nur falsche Ergebniss raus.

    Danke fürs Lesen
    Andreas

    Den Teil habe ich bisher.
    Select * from Tabelle1 LEFT OUTER JOIN Tabelle2 on Tabelle1.ProjLeiter = Tabelle2.MitarbID
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Du mußt die Tabelle 2-mal joinen:

    Code:
    test=*# select * from t1;
     p | pl | pm
    ---+----+----
     1 |  1 |  2
     2 |  2 |  2
     3 |    |  3
     4 |  4 |  1
    (4 rows)
    
    test=*# select * from t2;
     id |  name
    ----+--------
      1 | klaus
      2 | peter
      3 | hans
      4 | stefan
    (4 rows)
    
    test=*# select t1.p, t2_a.name, t2_b.name from t1 left join t2 t2_a on t1.pl=t2_a.id left join t2 t2_b on t1.pm=t2_b.id;
     p |  name  | name
    ---+--------+-------
     1 | klaus  | peter
     2 | peter  | peter
     3 |        | hans
     4 | stefan | klaus
    (4 rows)
    
     
  3. andyfis

    andyfis Benutzer

    Vielen Dank für die schnelle Antwort. Ich bin schwer beeindruckt.
    Wenn Datensatz 3 in Tabelle auch Null also beide Null sind, wird mir der Datensatz dann auch angezeigt ?
    Code:
    test=*# select * from t1;
    p | pl | pm
    ---+----+----
    1 |  1 |  2
    2 |  2 |  2
    3 |    | 
    4 |  4 |  1
    (4 rows)
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Natürlich:

    Code:
    test=*# update t1 set pm = null where p = 3;
    UPDATE 1
    test=*# select t1.p, t2_a.name, t2_b.name from t1 left join t2 t2_a on t1.pl=t2_a.id left join t2 t2_b on t1.pm=t2_b.id order by p;
     p |  name  | name
    ---+--------+-------
     1 | klaus  | peter
     2 | peter  | peter
     3 |        |
     4 | stefan | klaus
    (4 rows)
    
    
    Andreas
     
  5. andyfis

    andyfis Benutzer

    Vielen Dank , hat mir sehr geholfen.
    An sich hatte ich es schon so probiert, ich hatte nur den Fehler bei der Einordnung der zweiten Tabelle. Ich habe immer t2.name anzeigen lassen und nicht t2_b.name

    Super Forum, da macht es mir gleich doppelt Spaß in Foren schnell zu antworten, wo ich mich auskenne.
     
  6. andyfis

    andyfis Benutzer

    Ich hab da noch mal ne ergänzende Frage, an der ich gestern den ganzen Nachmittag hing, und nicht weiter kam. Auch ein "in Ruhe lassen" und heute neu gucken hilft mir leider nicht.

    Beispiel
    Code:
    Tabelle : Proj
     
    ID|Proj|Projleiter
    ------------------
    1 |4515|  5
    2 |4516|  6
    3 |5805|  5
    4 |5915|  6
     
    Tabelle : Mitarbeiter
     
    ID | Mitarb
    -----------
    1  |  Klaus
    2  |  Andreas
    5  |  Heinrich
    6  |  Jürgen
     
     
    Tabelle: KundenProj
    ID | ProjID | KDNR| NR  | Bezieh
    --------------------------------
    1|  2      | 1  |  30 | Kunde
    2|  2      | 3  |  30 | MitarbKunde
    3|  2      | 1  |  31 | Angest
    4|  1      | 2  |  30 | Kunde
    5|  2      | 5  |  31 | Angest
    6|  3      | 1  |  30 | Kunde
    7|  3      | 1  |  31 | Angest
    8|  2      | 3  |  31 | MitarbKunde
     
    Tabelle : Kunden
     
    ID |Name_des_Kunden
    ---------------------
    1  |HauptkundeGMBH
    2  |ZweiterKunde
    3  |HerrMüller
     
     
     
    Nun würde ich gerne folgendes erhalten:
     
    Proj | Projleitername | Name_des_Kunden
    ----------------------------------------
    4515 | Heinrich      |  ZweiterKunde
    4516 | Jürgen        |  HauptkundeGMBH
    5808 | Heinrich      |  HauptkundeGMBH
    5915 | Jürgen        |  Null
    
    Ich bekomme es schon gut hin, aber leider filtert er mir den letzten Datensatz raus,
    da ich nach meinem letzen JOIN
    eine
    WHERE KundenProj,NR = 30 AND KundenProj.Bezieh='Kunde'
    setze.

    Wäre schön, wenn ihr mir noch mal helfen könntet, sonst muss ich probieren, es in mehreren Schritten zu ersetzen.
     
  7. ukulele

    ukulele Datenbank-Guru

    In etwa so:
    Code:
    SELECT    p.Proj,
            m.Mitarb AS Projleitername,
            k.Name_des_Kunden
    FROM    Proj p
    LEFT JOIN Mitarbeiter m ON m.ID = p.Projleiter
    LEFT JOIN KundenProj kp ON kp.PrejID = p.ID
    LEFT JOIN Kunden k ON k.ID = kp.KDNR
     
  8. andyfis

    andyfis Benutzer

    so, ich bin nun doch selbst auf die Idee gekommen.

    Ich Dussel habe nach einem JOIN IF gesucht, dabei muss man dafür ja nur den ON Befehl mit weiteren Abfragen ergänzen um das Ergebnis zu bekommen. In meinem Fall also anstatt der WHERE -Abfrage einfach hinter dem JOIN Kunden ON.... AND KundenProj,NR = 30 AND KundenProj.Bezieh='Kunde'. Und somit geht es.

    Hab es nur noch mal für Anfänger wie mich hier hin geschrieben

    Danke fürs Lesen
     
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