Laden...

Probleme mit LEFT JOIN

Erstellt von dass vor 16 Jahren Letzter Beitrag vor 16 Jahren 942 Views
D
dass Themenstarter:in
122 Beiträge seit 2006
vor 16 Jahren
Probleme mit LEFT JOIN

verwendetes Datenbanksystem: SQL Server 2005

Hi,

ich habe zwei Tabellen: Die erste Tabelle heißt kunden und beinhaltet kundendaten wie Nachname, Vorname, Kundennummer (Autoincrement und PK). Die zweite Tabelle beinhaltet Bilder, die der Kunde hinterlegt hat: Bildid (Autoincrement und PK), Kundennummer, bilddatei.

In der Tabelle mit den Bildern liegen von ein und dem selben Kunden mehrere Bilder.

Mit folgender Abfrage

SELECT Kunden.Kundennummer, Kunden.Vorname, Kunden.Nachname, bilder.bilddatei
FROM Kunden
INNER JOIN
Bilder ON kunden.kundennummer=bilder.kundennummer

funktioniert zwar die Abfrage, er wirft einen Kunden aber so oft raus wie Bilder vorhanden sind. Ich möchte aber, daß der Kunde angezeigt wird mit nur einem Bild, auch wenn mehrere vorhanden sind.

Kann mir da einer helfen.

Schöne Grüße und vielen Dank

Gelöschter Account
vor 16 Jahren
SELECT TOP 1 Kunden.Kundennummer, Kunden.Vorname, Kunden.Nachname, bilder.bilddatei 
FROM Kunden 
INNER JOIN
Bilder ON kunden.kundennummer=bilder.kundennummer
D
dass Themenstarter:in
122 Beiträge seit 2006
vor 16 Jahren

Danke, aber dann wirft er mir nur einen kunden raus. er soll aber alle kunden rausgeben aber eben nur mit einem bild, auch wenn mehrere bilder vorhanden sind pro kunde

J
1.114 Beiträge seit 2007
vor 16 Jahren

Dann musst du erstmal selbst definieren, welches Kriterium herangezogen werden soll, für welches Bild die Abfrage sich entscheiden soll, wenn mehrere vorhanden sind. Ist das geklärt, musst du mit Aggregatfunktionen wie max, min usw. arbeiten, um deinem Kriterium gerecht zu werden.

Noch eine Anmerkung: So wie du deine Abfrage formulierst, ist es kein left join, wie in deinem Titel steht, sondern ein inner join... Ist dir der Unterschied da bewusst?

D
dass Themenstarter:in
122 Beiträge seit 2006
vor 16 Jahren

danke dir. hast du mal ein kleines beispiel da, wo ich mich langhangeln kann. der unterschied ist mir nicht klar 🙁

J
1.114 Beiträge seit 2007
vor 16 Jahren

Mit dem inner join kriegst du auch nur Kunden zurück, die mindestens ein Bild haben, also Kunden, die mindestens einmal über die Bilderkartei gejoined sind. Ist aber kein Bild vorhanden, so liefert dir

INNER JOIN
Bilder ON kunden.kundennummer=bilder.kundennummer

keinen Record, und folglich erscheint der Kunde nicht in der Ergebnismenge.

Über

LEFT OUTER JOIN
Bilder ON kunden.kundennummer=bilder.kundennummer

Hingegen werden auf jeden Fall ALLE Records der linken Tabelle geliefert (also deine Kunden). Wenn es keine Bilddaten dazu gibt, dann sind die zurückgegebene Bildspalten NULL.

D
dass Themenstarter:in
122 Beiträge seit 2006
vor 16 Jahren

danke dir. das habe ich vergessen. aber wie mache ich es jetzt das nur ein bild selektiert wird auch wenn mehrere vorhanden sind.

J
1.114 Beiträge seit 2007
vor 16 Jahren

Wie oben geschrieben... Über Agregatfunktionen... Lies dich mal in SQL ein, da solltest du in jeder Doku fündig werden.

476 Beiträge seit 2004
vor 16 Jahren

hallo dass,

aber wie mache ich es jetzt das nur ein bild selektiert wird auch wenn mehrere vorhanden sind.

es hängt wohl auch davon ab welches Bild verwendet werden soll wenn mehrere vorhanden sind oder ob es völlig egal ist, hauptsache nur irgend eines. Ansonsten hat Jelly schon richtig gesagt, guck' mal in eine Doku oder in ein Tutorial zu SQL.

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de