Tabellen vereinen

andyfis

Benutzer
Beiträge
5
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
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.520
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.




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

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)
 

andyfis

Benutzer
Beiträge
5
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)
 

akretschmer

Datenbank-Guru
Beiträge
9.520
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)

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
 

andyfis

Benutzer
Beiträge
5
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.
 

andyfis

Benutzer
Beiträge
5
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.
 

ukulele

Datenbank-Guru
Beiträge
4.637
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
 
Werbung:

andyfis

Benutzer
Beiträge
5
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
 
Oben