LEFT OUTER JOIN mit 2 "Rückgabewerten"?

LEFT OUTER JOIN mit 2 "Rückgabewerten"?

am 13.09.2007 09:30:18 von Gerome Muent

Hallo zusammen,
mir fiel kein besserer Titel ein, um mein Problem besser zu beschreiben.
Ich suche für untenstehendes eine elegante Lösung, wenn es die denn gibt.

Mein Fall (stark vereinfacht um auf wesentliche zu reduzieren):

Ich habe eine Tabelle "relations", die Kundenbeziehungen ausdrückt:


kunde1_id kunde2_id [... div andere Felder]
1 7
6 13
........


Jetzt möchte ich das in der Ausgabe als Klartext mit Kundennamen etc.
darstellen. Die Namen sollen aber natürlich nicht mit in diese Tabelle
geschrieben werden, sondern werden in der Tabelle "kunden" gespeichert
und verwaltet

ID kundenname [... div andere Felder]
1 Meier
6 Schulze
7 Müller
.....

Mittels einer Abfrage wie
SELECT kunde1_id, kunde2_id, kunden.kundenname as kundenname1
FROM relations
LEFT OUTER JOIN kunden ON kunde1_id=kunden.ID

bekomme ich den Namen von Kunde 1

Aber gleichzeitig den von Kunde 2? Steh da auf dem Schlauch. Geht das
überhaupt? Vielleicht über irgendein Subselect?

Danke für Tips, Gérôme


--
BM Computer-Services, Bergmannstr. 66, 10961 Berlin
Webdesign, Internet, Layout und Grafik
Tel.: 030/20649400, mobil 0175/7419517, Fax: 030/20649401
Web: http://www.bmservices.de, eMail: kontakt@bmservices.de

Re: LEFT OUTER JOIN mit 2 "Rückgabewerten"?

am 13.09.2007 10:20:25 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: LEFT OUTER JOIN mit 2 "Rückgabewerten"?

am 13.09.2007 10:47:49 von Claus Reibenstein

Gerome Muent schrieb:

> Mittels einer Abfrage wie
> SELECT kunde1_id, kunde2_id, kunden.kundenname as kundenname1
> FROM relations
> LEFT OUTER JOIN kunden ON kunde1_id=kunden.ID
>
> bekomme ich den Namen von Kunde 1
>
> Aber gleichzeitig den von Kunde 2?

Indem Du 2x auf kunden JOINst:

SELECT r.kunde1_id, r.kunde2_id,
k1.kundenname AS kundenname1, k2.kundenname AS kundenname2
FROM relations r
LEFT JOIN kunden k1 ON k1.ID = r.kunde1_id
LEFT JOIN kunden k2 ON k2.ID = r.kunde2_id

Aber warum eigentlich LEFT JOIN? Gibt es Fälle, wo eine der IDs nicht
besetzt ist bzw. keinem Kunden zugeordnet ist, und willst Du diese
ebenfalls angezeigt bekommen?

Gruß. Claus

Re: LEFT OUTER JOIN mit 2 "Rückgabewerten"?

am 13.09.2007 11:26:28 von Gerome Muent

* Claus Reibenstein wrote:

>> Mittels einer Abfrage wie
>> SELECT kunde1_id, kunde2_id, kunden.kundenname as kundenname1
>> FROM relations
>> LEFT OUTER JOIN kunden ON kunde1_id=kunden.ID
>>
>> bekomme ich den Namen von Kunde 1
>>
>> Aber gleichzeitig den von Kunde 2?
>
> Indem Du 2x auf kunden JOINst:
>
> SELECT r.kunde1_id, r.kunde2_id,
> k1.kundenname AS kundenname1, k2.kundenname AS kundenname2
> FROM relations r
> LEFT JOIN kunden k1 ON k1.ID = r.kunde1_id
> LEFT JOIN kunden k2 ON k2.ID = r.kunde2_id

Danke für die Antworten. Genau das hatte ich gesucht. Wußte nicht, daß
ich 2 X "JOINen" kann.


> Aber warum eigentlich LEFT JOIN? Gibt es Fälle, wo eine der IDs nicht
> besetzt ist bzw. keinem Kunden zugeordnet ist, und willst Du diese
> ebenfalls angezeigt bekommen?

Nicht auszuschließen, daß ein DAU einen Kunden löscht.
Möchte dann sowas wie "Kundename1 <-> ?" ausgeben und das nicht unter
den Tisch fallen lassen. Aber das ist hier glaub ich nicht wirklich wichtig.

Gruß, Gérôme

--
BM Computer-Services, Bergmannstr. 66, 10961 Berlin
Webdesign, Internet, Layout und Grafik
Tel.: 030/20649400, mobil 0175/7419517, Fax: 030/20649401
Web: http://www.bmservices.de, eMail: kontakt@bmservices.de

Re: LEFT OUTER JOIN mit 2 "Rückgabewerten"?

am 13.09.2007 11:30:30 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: LEFT OUTER JOIN mit 2 "Rückgabewerten"?

am 13.09.2007 13:22:03 von Claus Reibenstein

Gerome Muent schrieb:

> * Claus Reibenstein wrote:
>
>> Aber warum eigentlich LEFT JOIN? Gibt es Fälle, wo eine der IDs nicht
>> besetzt ist bzw. keinem Kunden zugeordnet ist, und willst Du diese
>> ebenfalls angezeigt bekommen?
>
> Nicht auszuschließen, daß ein DAU einen Kunden löscht.

Dem kann man vorbeugen, indem man das Löschen eines Kunden nicht
zulässt, so lange er noch mit einem anderen in Beziehung steht.

> Möchte dann sowas wie "Kundename1 <-> ?" ausgeben und das nicht unter
> den Tisch fallen lassen.

So, wie es jetzt dasteht, wird statt des Namens einfach NULL ausgegeben.

Gruß. Claus