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
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
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?
danke dir. hast du mal ein kleines beispiel da, wo ich mich langhangeln kann. der unterschied ist mir nicht klar 🙁
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.
danke dir. das habe ich vergessen. aber wie mache ich es jetzt das nur ein bild selektiert wird auch wenn mehrere vorhanden sind.
Wie oben geschrieben... Über Agregatfunktionen... Lies dich mal in SQL ein, da solltest du in jeder Doku fündig werden.
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