SQL mehrfach vorkommendes Tupel nur einfach ausgeben

s1m0n

Lt. Junior Grade
Registriert
Mai 2008
Beiträge
368
Hey Leute,

Sitz grad an ner Übungsaufgabe und komm einfach nicht weiter.

Also ich ne Datenbank mit Kundendaten.
Die Aufgabe ist:
Alle Kunden mit einem zweiten Kunden in derselben Stadt. Gib diese Kunden paarweise mit Namen
und Stadt aus, wobei jedes Paar nur einmal ausgegeben werden soll. Für Städte mit mehr als zwei
Kunden werden entsprechend alle möglichen Paare ausgegeben. Ordne die Ergebnisse nach Städten.

Die Tupel zu bilden ist kein Problem, nach Städten zu ordnen auch nicht.
Ich bekomms nur nicht hin, dass z.B. nur das Tupel (Becker,Kahlert) ausgegeben wird...
Bei mir wird nämlich das Tupel (Becker,Kahlert) UND (Kahlert,Becker) ausgegeben....

Ich hoffe ihr könnt mir helfen...

So siehts momentan aus:
SELECT k1.KdName,k2.KdName,k1.KdStadt FROM Kunden AS k1 JOIN Kunden AS k2 ON k1.KdStadt=k2.KdStadt GROUP BY k1.KdName,k2.KdName,k1.KdStadt HAVING k1.KdName<>k2.KdName ORDER BY k1.KdStadt;

Und das Ergebnis:
KDNAME |KDNAME |KDSTADT
--------------------------------------------------------------------------------------------
Ketzer |Fobke GmbH |Bremen
Fobke GmbH |Ketzer |Bremen
Schmidt |Fischer GmbH |München
Fischer GmbH |Schmidt |München
Zwack |Koch GmbH & Co.KG |Senden
Zwack |Babel |Senden
Koch GmbH & Co.KG |Zwack |Senden
Koch GmbH & Co.KG |Babel |Senden
Babel |Zwack |Senden
Babel |Koch GmbH & Co.KG |Senden
Kahlert |Becker |Stuttgart
Kahlert |Aberer |Stuttgart
Becker |Kahlert |Stuttgart
Becker |Aberer |Stuttgart
Aberer |Kahlert |Stuttgart
Aberer |Becker |Stuttgart
Zimmer |Zander |Ulm
Zimmer |Merz |Ulm
Zimmer |Graf KG |Ulm
Zimmer |Dreher |Ulm
Zander |Zimmer |Ulm
Zander |Merz |Ulm
Zander |Graf KG |Ulm
Zander |Dreher |Ulm
Merz |Zimmer |Ulm
Merz |Zander |Ulm
Merz |Graf KG |Ulm
Merz |Dreher |Ulm
Graf KG |Zimmer |Ulm
Graf KG |Zander |Ulm
Graf KG |Merz |Ulm
Graf KG |Dreher |Ulm
Dreher |Zimmer |Ulm
Dreher |Zander |Ulm
Dreher |Merz |Ulm
Dreher |Graf KG |Ulm
 
Das funktioniert eben nicht...

SELECT DISTINCT k1.KdName,k2.KdName,k1.KdStadt FROM Kunden AS k1 JOIN Kunden AS k2 ON k1.KdStadt=k2.KdStadt GROUP BY k1.KdName,k2.KdName,k1.KdStadt HAVING k1.KdName<>k2.KdName ORDER BY k1.KdStadt;

Ergebnis:
KDNAME |KDNAME |KDSTADT
--------------------------------------------------------------------------------------------
Ketzer |Fobke GmbH |Bremen
Fobke GmbH |Ketzer |Bremen
Schmidt |Fischer GmbH |München
Fischer GmbH |Schmidt |München
Zwack |Koch GmbH & Co.KG |Senden
Zwack |Babel |Senden
Koch GmbH & Co.KG |Zwack |Senden
Koch GmbH & Co.KG |Babel |Senden
Babel |Zwack |Senden
Babel |Koch GmbH & Co.KG |Senden
Kahlert |Becker |Stuttgart
Kahlert |Aberer |Stuttgart
Becker |Kahlert |Stuttgart
Becker |Aberer |Stuttgart
Aberer |Kahlert |Stuttgart
Aberer |Becker |Stuttgart
Zimmer |Zander |Ulm
Zimmer |Merz |Ulm
Zimmer |Graf KG |Ulm
Zimmer |Dreher |Ulm
Zander |Zimmer |Ulm
Zander |Merz |Ulm
Zander |Graf KG |Ulm
Zander |Dreher |Ulm
Merz |Zimmer |Ulm
Merz |Zander |Ulm
Merz |Graf KG |Ulm
Merz |Dreher |Ulm
Graf KG |Zimmer |Ulm
Graf KG |Zander |Ulm
Graf KG |Merz |Ulm
Graf KG |Dreher |Ulm
Dreher |Zimmer |Ulm
Dreher |Zander |Ulm
Dreher |Merz |Ulm
Dreher |Graf KG |Ulm
 
Hi,

wie sehen denn die Tabellen genau aus, auf die der Join ausgeführt wird? Eventuell hilft hier eine andere Form des Joins.

mfg
BassT
 
NATURAL JOIN liefert mir nur die Tupel, bei denen der Kundenname gleich ist ;)
Also auch nicht das was ich suche.

Die beiden Tabelle die ich per JOIN verbinde, sieht so aus:

dbo5zah.jpg

Ist ja 2 mal die gleiche...

Was daran interessant ist, ist der Name und die Stadt. Der Rest ist für die Aufgabe unbedeutend.
 
Du könntest an dein HAVING noch so etwas wie k1.KdName < k2.KdName hinzufügen, also der 1. Name muss im Alphabet vor dem 2. Namen kommen.
Wenn du dann Kahlert |Becker |Stuttgart und Becker |Kahlert |Stuttgart hast, fällt ersteres raus.
 

Ähnliche Themen

Zurück
Oben