Einzelnen Beitrag anzeigen

blackfin
(Gast)

n/a Beiträge
 
#2

AW: Select mit Where-Klausel und von dessem Ergebnis alle "Unterdaten" ermitteln

  Alt 30. Mai 2011, 23:30
Warum keinen JOIN?

Nehmen wir mal an, die Tabellen heissen "kunden" und "kunden_data", du willst alle Felder und der Primary Key aus Kunden heisst ID, in kunden_data der zugehörige Fremdschlüssel kundenID:

Code:
SELECT kunden.*,kunden_data.* FROM kunden INNER JOIN kunden_data ON kunden.ID=kunden_data.KundenID WHERE kunden.nachname LIKE ('M%') ORDER BY kunden.nachname ASC, kunden.vorname ASC, kunden.ID ASC;
Damit bekommst du für jeden Eintrag der kunden_data Tabelle eine Ergebniszeile, mit dem entsprechenden, übergeordneten Datensatz der kunden-Tabelle zusammengefügt, alphabetisch nach Nachname und Vorname geordnet:


kunden.ID kunden.nachname kunden.vorname kunden_data.artikel
-----------------------------------------------------------------
0 Maier Frank Tacker
0 Maier Frank Blöcke
1 Meyer Uli Blöcke
2 Müller Klaus Tacker
2 Müller Klaus Locher
2 Müller Klaus Heftklammern
usw....


Das kannst du dann clientseitig auswerten und dementsprechend anzeigen.
(z.B. in einer Schleife, solange sich beim Durchgehen der Datensätze die kunden.ID nicht ändert, ist es der gleiche Kunde usw.)

P.S:
Wenn du ebenso alle Datensätze aus kunden haben willst, die keinen eintrag in kunden_data haben, dann brauchst du einen LEFT JOIN.
Optimieren kannst du das natürlich, indem du nicht alles (*) aus beiden Tabellen holst, sondern nur die Felder, die du auch brauchst.
Das ganze ging auch noch als zweiter Weg über SubSelects, aber der mySQL-Optimizer mag JOINS lieber als Subselects, auch wenn diese oft sehr praktisch sind.

Geändert von blackfin (30. Mai 2011 um 23:59 Uhr)
  Mit Zitat antworten Zitat