Hi nochmal,
»»»» SELECT
»»»» pe1.wert,
»»»» pe2.wert,
hier werden doch Aliasnamen erstellt oder?
Ich wusste gar nicht das so funktioniert...
Nein, da werden keine Aliasnamen _erstellt_ sondern hier:
INNER JOIN produkteigenschaft pe1
INNER JOIN fügt eine Referenz auf die Tabelle unter dem Alias "pe1" dem Resultset hinzu. Die Spalten der Datensätz von produkteigenschaft, die dem JOIN entsprechen, stehen dann als pe1 zur Verfügung.
»»»» INNER JOIN produkteigenschaft pe1
»»»» ON produkt.id = pe1.produkt_id
»»»» -- und jetzt nur die Produkteingeschaften LÄNGE
»»»» AND pe1.Name = 'länge'
Bedeutet das, dass du ein Ergebniss nur für die Variable pe1 holst?
Nicht ganz, es bedeutet ich hole alle Datensätze aus 'produkteigenschaft', deren .Name = 'länge' ist als Tabelle in meine Abfrage und nenne sie pe1.
Warum das Aliasing? Weil du 2x dieselbe Tabelle joinst/brauchst und die DB ohne die unterschiedlichen Aliasnamen nicht wüsste aus welcher Menge eine bestimmte Spalte zu selektieren ist.
Warum explizite JOIN Syntax besser ist?
- u.a. weil sie dem Leser direkt das verhältnis zwischen den Ergebnismengen offenlegt und dieser nicht erst geistig die WHERE Klauseln evaluieren muss
Gruss, Frank