Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Probleme mit LEFT JOIN
dass
myCSharp.de - Member



Dabei seit:
Beiträge: 122

Themenstarter:

Probleme mit LEFT JOIN

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von dass am .
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

SELECT TOP 1 Kunden.Kundennummer, Kunden.Vorname, Kunden.Nachname, bilder.bilddatei 
FROM Kunden 
INNER JOIN
Bilder ON kunden.kundennummer=bilder.kundennummer
dass
myCSharp.de - Member



Dabei seit:
Beiträge: 122

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Jelly
myCSharp.de - Member



Dabei seit:
Beiträge: 1127
Herkunft: Burden (Luxemburg)

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
dass
myCSharp.de - Member



Dabei seit:
Beiträge: 122

Themenstarter:

beantworten | zitieren | melden

danke dir. hast du mal ein kleines beispiel da, wo ich mich langhangeln kann. der unterschied ist mir nicht klar
private Nachricht | Beiträge des Benutzers
Jelly
myCSharp.de - Member



Dabei seit:
Beiträge: 1127
Herkunft: Burden (Luxemburg)

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
dass
myCSharp.de - Member



Dabei seit:
Beiträge: 122

Themenstarter:

beantworten | zitieren | melden

danke dir. das habe ich vergessen. aber wie mache ich es jetzt das nur ein bild selektiert wird auch wenn mehrere vorhanden sind.
private Nachricht | Beiträge des Benutzers
Jelly
myCSharp.de - Member



Dabei seit:
Beiträge: 1127
Herkunft: Burden (Luxemburg)

beantworten | zitieren | melden

Wie oben geschrieben... Über Agregatfunktionen... Lies dich mal in SQL ein, da solltest du in jeder Doku fündig werden.
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 832

beantworten | zitieren | melden

hallo dass,
Zitat von 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
private Nachricht | Beiträge des Benutzers