Inner oder Outer Join
undso
- datenbank
Hallo Forum,
hab leider wieder ein Query Problem. Folgende Konstellation:
Tabelle: Mitglieder
UserID Name Geschlecht Wohnort
1 Peter M Stuttgart
2 Ida W Berlin
3 Udo M Frankfurt
4 Ela W Mainz
Nun gibt es eine Tabelle Freunde, wer mit wem befreundet ist: Buddys
Userid FreundID Notiz
1 2 NULL
2 1 NULL
3 2 NULL
2 3 NULL
Nun lese ich mit einem InnerJoin auf einer Seite die Buddys eines Users aus: Nehmen wir an Ida mit der UserID 4
select a.friend, b.name, b.geschlecht, b.wohnort from Mitglieder AS B LEFT OUTER JOIN on a.FreundID=B.UserID Buddys AS A where a.userid=2;
Klappt alles wunderbar. Ich erhalte:
1 Peter M Stuttgart
3 Udo W Frankfurt
Nun will ich der Ida ermöglich, anstatt den Buddys manuele Kontakte hinzuzufügen. Leider auch in die gleiche Spalte. Das Problem: In die FreundID wird ein User eingefügt, von dem es keine Daten in der Tabelle "Mitglieder" gibt. Ist es da trotzdem möglich die Daten mit der Query oben auszulesen? Geschlecht und Wohnort ist dann nicht vorhanden. Da sollte der Inhalt dann einfach leer sein.
Die Erweiterte Tabelle "Buddys" würde dann zum Beispiel so aussehen, wobei ich das Feld "Notiz" oben nicht ausgelesen habe:
Userid FreundID Notiz
1 2 NULL
2 1 NULL
3 2 NULL
2 3 NULL
2 Karl Mein Schatz
Die Ausgabe sollte dann so aussehen:
Klappt alles wunderbar. Ich erhalte:
1 Peter M Stuttgart
3 Udo W Frankfurt
Überhaupt möglich?
Grüße
Hello,
1 Peter M Stuttgart
3 Udo W Frankfurt
- Karl - -
jein. Zunächst einmal, du suchst keinen INNER JOIN sondern eher einen LEFT JOIN ("wenn vorhanden, dann füge hinzu").
Was ich allerdings als problematisch ansehe: der Name steht in der Nutzertabelle. Du kannst also ohne gültigen Eintrag dort niemals einen sinnvollen Join ausführen, weil der Name leer bleiben wird. Dein Beispiel mischt bei FreundID die wirklichen IDs und Namen. Das ist eine relativ ungültige Konstruktion.
Da würde ich eher "virtuelle Freunde" anlegen, bei denen noch Informationen fehlen und diese dann in die Tabelle eintragen.
MfG
Rouven
hi
»» Was ich allerdings als problematisch ansehe: der Name steht in der Nutzertabelle. Du kannst also ohne gültigen Eintrag dort niemals einen sinnvollen Join ausführen, weil der Name leer bleiben wird. Dein Beispiel mischt bei FreundID die wirklichen IDs und Namen. Das ist eine relativ ungültige Konstruktion.
Ja da hast du Recht. Ist schon blöd, wenn dann ein Name in der Spalte "FreundID" steht. Da muss ich mir dann bis morgen etwas sinnvolles einfallen lassen.
Wie du schon sagtest, entweder noch "virtuelle Freunde" bei denen noch die Informationen wie Geschlecht und Wohnort fehlen.
Die Tabelle "Mitglieder" sollte aber eher nicht mit virtuellen Mitgliedern wachsen. Wobei.. na ja. Komische Situation.
Liegt vielleicht an der Uhrzeit. Nach dem Schlaf muss ich mir das erneut reinziehen ;)
Grüße